![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
cf
想出成果的acmer
当你越来越漂亮的时候,自然有人关注你,当你越来越有能力时,自然会有人看得起你,改变自己,你才有自信,梦想会慢慢的实现,要做好你自己,懒惰可以毁掉一个人,勤奋可以激发一个人,不要等到夕阳西下的时候才对自己说如果当初…如果…我就会怎么样,之类的话,都已经晚了,我只想告诉你一句话:要做一个连自己都羡慕的人!
展开
-
codeforces 857 D (初始化歪了,错失上分良机)
对于A物品从大到小枚举每个物品i当最大值,此时会发现,第i个商店必须选A,而价值比A[i]大的商店必须买B物品,可以维护出B物品的最大值至少是mx,而其余的物品既可以选A也可以选B。在其余的商店里,如果选B能使答案更优秀,就选对应的B,否则就选A,不会使结果更差。根据mx和A[i]的关系分情况讨论,如果mx更大,答案只能是mx-A[i];如果mx更小,可以在B中找比A[i]大和小的位置,看能否使答案更优。后来发现最大值变量初始化成0了,默认B的最大值是0,改成初始化为-1秒ac,寄。原创 2023-03-10 10:25:22 · 188 阅读 · 1 评论 -
codeforces 850 D (模拟)
但是还要注意另一种情况,如果存在 w->i, i->n, n->w;w->n, n->i, i->w. 不能相互抵消,但是可以通过两次交换满足这三个要求。1和2先换,2和3的需求就变成互补的了,2和3再换.给定m个w、i、n,随机分配给m个人,每人3个字母。现在可以让任意两个人交换手中的一个字母,求最少需要交换多少次并输出方案.如果某个人多w且没有i,就标记为w->i;如果某个人多i且没有w,就标记i->w,二者可以交换满足对方的条件。原创 2023-02-07 11:17:52 · 213 阅读 · 0 评论 -
codeforces div2 845 CD
观察发现所有节点每个时刻贡献都是2^n-1,一半的情况是1,一半的情况是0.对于叶子显然是如此。t=1,根据其子节点的异或和得到其权值,子节点对应的所有情况是全0到全1的,异或和结果是1的全部情况也就是有Cn1 + Cn3 + …,只选出奇数个1的情况,所以一半的情况是1,贡献为2。双指针,没想到,寄。给定长度为n的数组a,在其中选择若干个数组成数组b,对于1-m这些数,在b中至少存在一个数是他的倍数。给定一颗有根树,树上每个点的权值为1或者0.每个时刻,树上所有节点的权值变为子节点权值的异或和。原创 2023-01-27 15:05:41 · 206 阅读 · 0 评论 -
edu 141 B(构造)
最大就是1到n^2-1都有,可以构造。首先,假设是一条链,只要头和尾交叉放置即可。1 n^2 2 n^2-1 3…这样n^2根据左右得到n ^ 2-1和n^2-2,依次类推。那么对于矩阵来说,可以考虑蛇形走位,奇数行正着放,偶数行倒着放,按照链中构造的顺序放,相当于是个链去用。给定1到n^2,构造一个n*n的矩阵,把任意两个数之间的绝对值之差加入集合s中,使得s尽可能地大。原创 2023-01-22 19:36:25 · 185 阅读 · 0 评论 -
codeforces 843 B(思维)
乐,没想出来,看了题解才会。如果某个数x,起不到任何作用,就可以在某个序列的基础上或上x,结果还是原来的数。简而言之,如果某个数的每一位都出现过不止一次,就能找到。出现过不止一次,别的数也可以贡献此位。给定长度为n的数组,判断能否找到两个不同的序列,满足序列的或相等。原创 2023-01-22 19:27:05 · 199 阅读 · 0 评论 -
Codeforces Round #838 (Div. 2) C(思维、dp)、D(思维、交互)
当时想的是dp,表示每个位置有多少个灵活使用的空位。如果不需要灵活使用的空位,这些位置就是01任选,2的幂次的贡献,如果需要把所有灵活使用的空位都用上,那贡献只能是1. (晚上太困了,忘了由i-1的状态转移到i,不然还能上波分,问题不大,主要是理解的不够深)其实很有道理,不妨用01来说明,现在两个位置都是1. 因为前i-1个位置是可以内部变换满足中位数那个限制的,也就是说前i-1个位置至少有i-1个1,不然他是满足不了限制的,而第i个位置又是1,前i个位置有i个1,已然满足条件,他前边的空位就01任选了。原创 2022-12-16 15:26:07 · 515 阅读 · 0 评论 -
2021 ICPC 上海 H(Kruskal重构树)
给定n个点m条边的无向图,每个点具有一个点权,到达之后可以累加上这个权值的能力,而通过某一条边需要当前的能力值大于这条边的边权才可以(通过后能力值不会减少)。所以建好树之后,我们就可以对于每个查询从叶子开始往上爬,如果父节点的点权(对应选择边的边权,也就是合成的代价)原创 2022-12-15 22:00:03 · 226 阅读 · 0 评论 -
2021 ICPC 沈阳 J (bfs)
bfs,搜索从0000到其他状态的最短路。然后哩,我们可以发现从状态a转移到b,相当于从0000转移到b-a.相当于有个偏移量,直接到a状态了,搜索b-a需要多少步即可。给定四个数0-9的数,变成另外四个0-9的数。每次可以选择1-4个连续的数,都+1或者都-1 (mod 10).合法的状态转移我是用dfs,3^4暴搜搜出来的。没想到可以转化成b-a,蚌埠住了。原创 2022-12-15 11:17:11 · 325 阅读 · 0 评论 -
2022 浙大城市学院 新生赛 补题
比较套路的题,这n次位运算是独立的,可以对于每一位提前预处理出来,以0和1为起点能否变成1. 然后对于每次查询,从高位到低位处理,如果0能变成1直接这一位填0,如果1才能变成1在满足限制的前提下这一位填1,二进制特性,这一位选1比后边所有位都选1更优。给定n层的树,第i层有i个叶子,类似数字三角形。给定n次位运算,包括&、|、^.给定q次询问,每次可以选择[0,r]中的任意整数x,令x经过这n次位运算最大,输出选择的x.给定x、y、z,x和y都有a个1、b个0,z有c个0. 满足y原创 2022-12-14 22:07:06 · 354 阅读 · 0 评论 -
2020 银川 B(dp好难捏)
fi,j,k表示前i个数,分成j段,然后当前第j段已经选了+、-,只选了+,只选了-。(也可以再加上什么都不选,也可以用前j-1段已经选了+、-来代替)一个长度为n的数组,分成k个不相交的子段,每个子段的贡献是其中的最大值-最小值,求最大贡献是多少。0可以由1和2推得,也由前一个状态顺延(第i个数不选),也可以使第i个数单独成一段。2也可以由前j-1段选了+、-推得,也可以由前一个状态顺延(第i个数不选)1可以由前j-1段选了+、-推得,也可以由前一个状态顺延(第i个数不选)0表示当前这一段已经选了+、-原创 2022-12-13 17:35:28 · 277 阅读 · 0 评论 -
codeforces edu 139 (经典教育场被教育)
给定x,y,最大的k,满足gcd(x,y) = gcd(x+1,y+1) = gcd(x+k-1,y+k-1) = 1,gcd(x+k,y+k)!x%p是x比p的倍数多多少,p-x%p是需要补多少,但是如果恰好是p的倍数这个结果就是p了,实际是0,所以要%p.所以gcd(x+k,y+k) = gcd(x+k,y+k-(x+k)) = gcd(x+k,y-x).然后可以质因数分解掉y-x,因为y-x是固定的,得到y-x的质因子p。之后看k应该取多少,x+k是p的倍数。说明x+k含有y-x的质因子。原创 2022-12-13 17:10:02 · 487 阅读 · 0 评论 -
2021 ICPC上海站 D(思维),G(猜结论),I(01背包变形)
如果有偶数个儿子,自己分配,Cn2、Cn-22这样的,然后如果是奇数个儿子,留着一个儿子和该节点连向父节点的边配合,剩下的选俩、选俩直到都选完。给定n个物品,有体积和价值。假设x=a/b,然后发现就是个一元二次方程,然后如果Δ不是某个数的平方的话,是不符合题意的,因为x不能是无理数的。给定一棵n个节点的树,保证n是奇数,然后我们需要把这n-1条边分成互不相交的n-1/2组,即每两条边在一个组里,然后。f[i][j][k]: 前i个物品,有j个翻倍,然后集合1的体积和-集合2的体积和为k。原创 2022-12-12 22:07:01 · 341 阅读 · 0 评论 -
Codeforces Round #643 (Div. 2) E(三分)
然后三分的使用条件就是具有极值点,假设最优解为所有数等于ans,那么ans不管是+1还是-1都会使答案变得更差或者不变(操作的消耗可能为0),所以可以三分找。三分,函数值可以花O(n)的时间枚举得到,当然也可以维护前缀和二分求得。给定长度为n的数组。有三种操作,求最小的花费使得数组中所有元素相同。那么为什么可以用三分呢,首先直接二分不太行,因为不具有单调性。花费c,使得某个数+1,另一个数-1.花费a,使得某个数++;花费b,使得某个数–;原创 2022-12-12 14:41:26 · 268 阅读 · 0 评论 -
2020 ICPC 南京站 F(期望,三分)
假设我们每次都点燃x个烟火,然后进行一次检查。成功的概率是1-(1-p)^x,令其为p’.如果点燃不成功,就会再点燃,直到点燃为止。是一个比较经典的几何分布了,前i-1次失败第i次成功这样的,如果概率是p,期望就是1/p,期望需要1/p这么多次成功。也就是1/p’,而每次操作也就代表着点x个烟火,然后进行一次检查。再乘以x*n+m即对应的期望时间。给你若干烟火,每次可以花n的时间点燃一个,成功概率为p,花m的时间检查前边点燃的烟火是否存在一个点燃成功。求直到第一次点燃成功时,最小的期望时间。原创 2022-12-12 10:17:08 · 288 阅读 · 0 评论 -
2020 ICPC 南京站 L(签到失败)
一眼二分,然而并不是,因为没有单调性。可以把两个数组合并,分红蓝两种颜色,其实就是求由蓝色点分隔后的红色点组成的最长的一段多长。因为选点肯定选在某几个连续红点中间。给定长度为n的a数组和长度为m的b数组,找一个点c,满足尽可能多的a中的点到c的距离严格小于b中所有点到c的距离。如果红点和蓝点重合,要把对应的红点删除。原创 2022-12-12 10:10:49 · 269 阅读 · 0 评论 -
2020 ICPC 南京站 E(思维+暴力)
本来想的逆着走,但是发现不对,能被hack掉。情况非常多,分支判会很多。所以应该暴力,暴力枚举UDLR的顺序,然后模拟判断是否合法,也就4!起点为(0,0),终点为(x,y),给定一组上下左右的串,可以对其任意重排序,判断是否存在一个序列使得该点不会走到(x,y),若存在,输出方案.原创 2022-12-11 22:06:55 · 290 阅读 · 0 评论 -
Codeforces Round #825 (Div. 2) B(会C不会B,输)
b1和bn直接等于对应a数组的值即可。之后每个bi受ai-1和ai限制,最小值为ai-1和ai的最小公倍数。如果把lcm这个数变大了,有可能会影响gcd的取值。给定长度为n的数组a,构造一个长度为n+1的数组b,满足gcd(bi,bi+1) = ai.原创 2022-12-09 21:13:27 · 170 阅读 · 0 评论 -
Codeforces Round #832 (Div. 2) C(不会C,输麻了)
如果某个人将a1减到0,则必输。因为所有数都>=1,操作者将a1减到0,对手下一次操作把那个0换到a1,操作者就输了。所以要尽快地让对方把一个数减少到0,就赢了。若此时a1=0,操作者输;否则,操作者使a1–,并交换a1和ai(2原创 2022-12-09 11:13:58 · 187 阅读 · 0 评论 -
Codeforces Round #829 (Div. 2) E(不会概率,输)
假设0的个数是cnt0,1的个数是cnt1。假设这个数量是k,说明最后边还有k个0和他们对应,都没有放到正确的位置。所有的选择方案是Cn2,其中有k*k的可能性选中一对能消去逆序对的。求和i从1到k,每次求选中一对能消去逆序对的两个位置的期望。可以发现是几何分布,前i-1次失败且第i次成功的概率,E(X) = 1/p,也就 i / Cn2的倒数,之后从1到k分别求和即可。给你一个长度为 n 的 01序列,每次等概率随机交换序列中的一对数,如果它们是逆序对,则交换它们的位置,求排成顺序序列的期望操作次数。原创 2022-12-08 19:30:15 · 202 阅读 · 0 评论 -
Codeforces Round #772 (Div. 2) E (图论建模,好题)
题目题意: 在一条水平轴上,给定n辆车,每辆车以随机的速度行驶,有m个限制关系。限制关系有两种,一种是要求两车不能相撞;一种要求是两车必定相撞。输出任意解或者判断无解。思路: 如果一定不能相撞,那么说明长这样,反向且往左的在左边才行;如果一定相撞,说明也是反向不过是>原创 2022-12-02 14:36:45 · 112 阅读 · 0 评论 -
Codeforces Round #772 (Div. 2) C
如果ana[n],无解。如果an>=0,有解,只要每个数都是a[n-1] - a[n]即可。原创 2022-12-01 22:41:00 · 272 阅读 · 0 评论 -
codeforces 820 F
给定一个长度为n的数,v(l,r)表示这个数从(l,r)产生的值。对于m组询问,每组询问,求最小化l1后最小化l2,使得v(l1,l1+w-1)10再模9,相当于没乘。然后把所有长度为l的字符串哈希值按值存起来,也就9个数,之后9*9暴力枚举最小的l1、l2组合即可。原创 2022-11-24 22:25:02 · 86 阅读 · 0 评论 -
codeforces 834 F
②否则的话,肯定得一直加直到进位了。此时也只剩原创 2022-11-24 22:16:20 · 64 阅读 · 0 评论 -
codeforces 834 G
从后向前构造a,对于每个bi,找到比它小且unused的最大的数,因为大的数放在后边,小的数放在前边,这样字典序更小。另外,ai*2 = bi,显然更优。给定数组b,其每个数是一个permutation a每两个相邻数的最大值。原创 2022-11-23 16:49:09 · 48 阅读 · 0 评论 -
codeforces 835 G
题目题意: 给定一棵树,判断能否从点a到点b的异或和为0.可以使用至多一次超能力,在任意一点可以直接传送至任意非b的点,之后再走到b使得异或和为0.ps:走到b时若异或和不为0,便不能往后走,提前结束。思路: 不传送直接判断异或和是否为0.若传送,只要存在点b到其他点的异或和=a到其他点的异或和,即可使异或和为0.dfs求出距离,拿set存一个点的异或和,另一个枚举。时间复杂度: O(nlogn)代码:原创 2022-11-23 10:49:48 · 60 阅读 · 0 评论 -
codeforces 828 E1
给定a、b、c、d,判断是否存在x、y,满足a原创 2022-11-18 16:53:48 · 67 阅读 · 0 评论 -
2021 ICPC 沈阳 B(建图染色)
想到每个比特位是独立的,对于每个比特位我们可以建图。如果某个比特位是1,说明au和av在这一位是一个0一个1;如果某个比特位是0,说明au和av在这一位都是1或者都是0.这样就可以进行染色,如果染出这种图,就有解,答案则按照最小的颜色进行统计。给定m条限制,au 异或 av = w (w原创 2022-11-18 13:50:58 · 71 阅读 · 0 评论 -
codeforces 833 C
用0把每个数组分隔开。第一个0与第二个0之间,把第一个0变为出现次数最多的数x的相反数-x。它并不影响下一个0影响的范围,假设第二个0与第三个0之间出现次数最多的数是y,y-x仍是对应区间出现次数最多的数。给定一个数组,可以把某个为0的数变为任意数。使数组的前缀和和为0尽可能地多。原创 2022-11-17 10:29:34 · 91 阅读 · 0 评论 -
edu 137 D(妙蛙)
首先可以把s的前导0去掉,对结果没有影响。s1可以取s串本身,s2要尽可能地在s1从大到小的有0的地方放上1。假设从大到小第一个0的位置是idx,子串的长度最大也就n-idx (下标从0开始)。所以枚举一下长度为n-idx的字串再与s取交即可。tip: 因为数据是随机生成的,所以idx是n/2的概率很小,需要二分之一的二分之n次方,如果n是1e6,几乎不可能达到一半。所以idx大概率很小,基本能达到O(n)的时间复杂度。给定01字符串s,任意取两个s中的子串s1和s2,让二者求或,令结果尽可能地大。原创 2022-11-16 15:59:04 · 59 阅读 · 0 评论 -
codeforces 726 E2
给定长度为n的字符串s,有两种操作: 删除字符串的最后一个字符;通过两种操作使字符串长度变为k,并且是字典序最小的。s[i] == s[i%p],和历史最优p一样,不用管,因为不知道s[i+1]和s[(i+1)%p]的关系。s[i] > s[i%p],寄,没法比取前p个字符更优了。s[i] < s[i%p],把s[i]加入到队伍会更优。假设历史最优的前缀长度是p,那么对于某个位置i。不用看后边的,把b加入队伍显然更优越。比如dbcab,遍历到b。原创 2022-11-14 14:04:47 · 755 阅读 · 0 评论 -
codeforces 729 C
打表找规律(bushi)。打表找规律不是很好找。但是我们可以从f(i)的性质来看。f(i) = x,说明1到x-1都是i的因子。枚举x,求n中有多少个数是lcm(1,2…x-1)的倍数就可以,x不会很大,所以时间复杂度纯纯够用。注意,枚举x的时候,需要满足是lcm(1,2…x-1)的倍数且不是lcm(1,2…x)的倍数,不然f(i)就不是x了。f(i): 最小的不是i的因子的数。求f(1)+f(2)+…f(n). n原创 2022-11-11 13:57:19 · 46 阅读 · 0 评论 -
codeforces 730 C
数据范围很小,v是0.1,用不了几次就会结束。PS: 注意要用eps判断是否归零、大于,否则误差很大。原创 2022-11-10 21:04:57 · 102 阅读 · 0 评论 -
codeforces 726 D
③对于2的整数次幂,没法操作成奇数。先手如果不减半,就变成非2的整数次幂,根据②,后手必胜了。2^3 = 8,恰好能砍2次,16能砍3次。2的k次方能操作k-1次。②非2的整数次幂的数总能通过一次操作变成奇数,因为他存在不是2的倍数的因子,也就是作为奇数的因子。因为因子的个数是奇数个,至多能操作偶数次。你减少一次,对方减少一次,这样永远是成对减少的。对于偶数来说,如果能通过操作变成奇数,则先手必胜,因为操作之后后手就是面对奇数的先手了。给定一个数x,每次操作可以减少非1和非x的因子,不能操作者输。原创 2022-11-10 16:00:40 · 102 阅读 · 0 评论 -
cf 830 C1. Sheikh (Easy version)
发现增加元素肯定赚,加法是真加而且进位,异或最多是不进位的加法。那么最大就是f(1,n),之后双指针查找和f(1,n)一样大的最短区间。查询1到n中最大的f(l,r),f(l,r) = sum(l,r) - xor(l,r).如果有多个最大的,取任意一个长度最小的区间。原创 2022-10-25 15:28:50 · 122 阅读 · 0 评论 -
cf 830 D1. Balance (Easy version)
拿一个set维护集合中的数,另外拿map维护每个k上一次枚举到哪里,因为mex随着集合的增加只增不减的。这样复杂度也就n+n/2+n/3…给定两种操作,1.插入一个集合中没有的数x;2.查找不在集合中的最小的k的倍数。原创 2022-10-25 15:24:34 · 294 阅读 · 0 评论 -
codeforces 724 CD
用一个map维护,维护每个位置{l,r}数对的数量即可。因为现在是2:1,如果前边有2:1,就可以把那一段2:1的单独作为一段,也不影响后边一段是2:1,这样之前出现的2:1都能分出一段。mp[{l,r}]就是答案,很妙,我就没想到。给定一个字符串,里边只有D或者K两个字母。对于前i个字母,求最多能分成几个连续的非空子段,使得每个子段中number(D)/number(K)均相等。原创 2022-10-21 11:24:07 · 61 阅读 · 0 评论 -
codeforces 821(div2) D2
对于D1,如果x>=y,直接贪心猜结论即可。那么对于x原创 2022-09-21 16:20:51 · 65 阅读 · 0 评论 -
codeforces 821-C
给定一个数组,至多执行n次操作,将其变成非递减的。operation: 可以任选[l,r],l < r. 若a[l]与a[r]奇偶性不同,a[r] = a[l];若a[l]与a[r]奇偶性相同,a[l] = a[r].可以把所有数变成一个数。当时光想着最大值最小值,发现操作不了。花1次操作把头和尾变成一样的。然后左边同奇偶可以变;右边不同奇偶可以变。头和尾都一样,中间的都能变了。原创 2022-09-20 22:08:50 · 69 阅读 · 0 评论 -
codeforces Valera and Elections (这思维题是做不明白了)
1原创 2022-08-06 21:22:45 · 108 阅读 · 0 评论 -
dp学习笔记
1原创 2022-08-06 17:05:01 · 114 阅读 · 0 评论