首页 > 其他分享 >20230918 集训

20230918 集训

时间:2024-01-31 22:35:01浏览次数:30  
标签:水桶 所有 吸收塔 leq 20230918 操作 吸收 集训

A. 操作

题目大意

有一个长为 \(n\) 的、初始全为 \(0\) 的数组和 \(m\) 次操作。操作分两种:

1 l r:将下标区间 \([l, r]\) 内的数全加 \(1\);

2 l r:将下标区间 \([l, r]\) 内的操作再执行一遍。

求所有操作结束后数组内每个数。

\(1 \leq n, m \leq 1e5\),保证各操作合法。

思路

简单题。

正着不好搞。考虑将操作倒着来。对操作、数组各开一棵线段树表示这个操作被执行了几次,数组上的同理。于是倒序遍历操作,按要求将对应区间加上就好了。

B. 数码

题目大意

定义 \(S(n, k)\) 表示正整数 \(n\) 在 \(k\) 进制下各数位上数的和。

给定 \(n, K, x\),你需要求出有多少个整数 \(k \in [2, K]\) 满足 \(S(n, k) \leq x\)。

\(1 \leq n \leq 1e12, 1 \leq K, x \leq 1e18\)

思路

发现数据范围十分大,感觉要么根号要么 \(\log\)。于是考虑根号分治。令 \(S = \sqrt n\),对 \(k\) 分治。小于 \(S\) 的 \(k\) 可以直接暴力判,大于 \(n\) 的 \(k\) 也好搞。接下来发现对于 $S < k < n $ 的 \(k\),\(n\) 的 \(k\) 进制表示最多只有两位,而第一位又只有根号种情况。然后又可以打表发现第二位构成若干等差数列,于是就可以搞了。

C. 圆环

题目大意

警察正在追捕一名嫌疑人。他所在的城市可以抽象成一个个点的环,点编号 \(0\) 到 \(n\),从 \(i\) 到 \((i + 1) \bmod n\) 有条无向边。建立起这条无向边需要 \(C_i\) 的代价,即如果不付出 \(C_i\) 代价这条边是不能通行的。

由于精力有限,警察在接下去 \(P\) 天中的第 \(i\) 天只能在点 \(a_i\) 与 \(b_i\) 之间巡逻。因此,警察想知道在保证每对 \(a_i, b_i\) 联通的条件之下,代价之和的最小值。

\(3 \leq n \leq 5e5\) ,\(1 \leq P \leq 1e5\)

思路

首先所有边全部连上一定合法。于是考虑断开一条边,这样任两点间的路径方向就可以确定。然后考虑枚举断开的是哪一条,增量法维护当前所有的路径方向。剩下的就是求动态路径并上的权值和。也就是区间 \(+1/-1\),全局 \(>0\) 位置的权值和。可以线段树维护。

D. 小学数学

题目大意

有 \(n\) 个水桶,第 \(i\) 个水桶初始有 \(i\) 升水。定义一次两个水桶间的倒水操作:用当前水量较多的水桶向另一水桶倒水,直到另一桶里的水量翻倍。要求构造一种倒水的方案,使得所有操作结束后剩余水量最多的水桶剩的水最多。

思路

玄学题。

显然答案不会是 \(\sum_{i - 1}^ni\)。

定义一个数被吸收:这个数与另一数操作若干次后变成 \(1 / 0\)。

首先可以考虑将所有数都堆到某一个数(称为吸收塔)上。但是可以发现这样行不通,因为有的时候无法把所有数吸收掉。于是考虑将某两个数作为吸收塔将其他所有数吸收掉。

有一个结论:对于任意两水桶,其中一个水量为 \(2\) 的幂次,另一个水量为奇数,则总能进行操作使得这两个水桶中有一个水桶只剩 \(1\) 升水。

这启发我们将 \(1, 2\) 两个水桶作为吸收塔,用 \(a[2]\) 吸收其他所有数,而将 \(a[1]\) 保留为 \(1\)。每次要吸收一个数 \(x\) 的时候先把 \(a[1]\) 变成 \(2\),然后不断操作 \(a[2], x\) 直到 \(a[2] \ge x\)。然后反复操作 \(a[1], a[2]\)。根据上面的结论,两个数最终总有一个数会变成 \(1\)。于是把 \(a[1]\) 变成 \(1\),继续吸收 \(x\) 直到吸收完。

这之后 \(a[2]\) 以后的所有数都只会是 \(1\) 或者 \(0\)。于是可以将每两个 \(1\) 合并成一个 \(2\),然后吸收这个 \(2\)。这样就可以搞掉 \(a[2]\) 后的每对 \(1\)。那么这样之后最多有两个 \(1\) 和一个作为答案的数。可以证明这样已经是最优的。

时间复杂度玄学。

花絮

因为是 \(918\),所以考试考到一半开始鸣笛。当时教练不在,于是我们都犹豫要不要站起来默哀。机房里的人一半站着,一半坐着,一半如站如坐。最后大家还是都站起来了。但是好像有好多站起来之后继续调代码的(

标签:水桶,所有,吸收塔,leq,20230918,操作,吸收,集训
From: https://www.cnblogs.com/forgotmyhandle/p/18000270

相关文章

  • 2024初三年前集训测试1
    前言总分:\(210\)\(T1\):\(40\),挂了\(60\),没考虑到他最后可能没有“句号”\(T2\):\(100\),\(Hash\)套\(map\)最劣解\(A\)掉了,直接用\(map\)实际上也能过。\(T3\):\(70\),忘记判断无解挂了\(20\)。跑的最短路,发现会被\(Hack\)调了好久,到最后自己造的\(Ha......
  • 6.【2024初三年前集训测试1】
    \(\Huge打了一场模拟赛,又垫底了。qwq\)2024初三年前集训测试1T1学说话\(100pts\)水题,秒了。单词被下划线分隔开,对于每个单词来说,只要记录最长的单词长度,用\(tot\)临时记录,遇到下划线就清零,\(ans\)记录最大值,最后输出即可。代码#include<bits/stdc++.h>#defineintl......
  • 2024初三年前集训测试1
    2024初三年前集训测试1\(T1\)学说话\(100pts\)找到下划线后将计数器归零。点击查看代码strings;intmain(){freopen("word.in","r",stdin);freopen("word.out","w",stdout);intans=0,num=0,len,i;cin>>s;len=s.si......
  • 2024初三年前集训测试1
    2024初三年前集训测试1我TM以后比赛不造数据对拍就TM是大傻逼打了2hours,觉得挺简单的,于是交了就润了。所以我是傻逼。T1:显然题,但scanf("%c",&a)\(\to\)scanf("%c",&a),\(100pts\to30pts\)wkh2008精通科技,可是我不会。科技#include<bits/stdc++.h>using......
  • 寒假集训纪要
    1.28KMP算法匹配intj;j=0;for(inti=1;i<=la;++i){while(j&&b[j+1]!=a[i])j=next[j];if(b[j+1]==a[j])j++;if(j==lb){cout<<i-lb+1<<'\n';j=next[j];}}处理next数组j=0;for(inti=2;......
  • 寒假集训Day10
    前缀和https://www.luogu.com.cn/problem/P2280一维前缀和维护一个前缀和数组,使得每一个元素num[i]等于从a[1]到a[i]所有元素之和,一位前缀和非常好写。这个时候如果我们要求某一区间[l,r]中所有元素的和,只需要用num[r]-num[l-1]即可二维前缀和我们用num[i][j]表示从(1,1)到(......
  • 六至水土,出水土记,一千言,写在寒假集训的最后几页
    前言写这篇回忆入魔咕咕了其他随笔忘了吃饭了所以也不是上课摸鱼吧写一些平平淡淡的事可能有些个人色彩了假如就是一个平行世界的水土和xndxfz吧不想看就不看都挺好多年前一至水土重庆卖的房子比较多价格也在涨我爸的一个高中同学是房屋中介公司和水土某楼盘有合作......
  • 2024寒假集训日记
    1.27闲话做题纪要CF1433ETwoRoundDances详见CF1433ETwoRoundDances题解。CF739AAlyonaandmex详见CF739AAlyonaandmex题解。1.28闲话做题纪要luoguP1993小K的农场详见【学习笔记】差分约束。luoguP3275[SCOI2011]糖果详见【学习笔......
  • 第一次 10天校内集训总结
    这十天,作为第一次在校集训,无疑即是高效的,也是收获满满的;首先,我十分感谢Lyn学长十天以来的辛勤付出然鹅在这十天以来也发现了不少问题;1.与题解的抗争可能是由于学长的速度有些快,而且本人在秋季培训中也没有太过认真的打下一个所谓牢靠的基石(根本原因);因而除了在开始复习语言基......
  • 2024.1集训总结
    难吗?不难,就是需要熟练。————某物理老师首先无可争议的是,这十天的效率,非常高,学习的内容比上学阶段之和还要多的多,将关键的算法、数据结构等系统地走了一遍,从是什么,到严谨地证出来为什么,再上手练习怎么用,受益匪浅。现在可以做到给一道题,能大概感......