摘要:
题目描述: 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间[l,r][l,r] 设为1, 操作2是把给定区间[l,r][l,r] 设为0, 操作3把给定区间[l,r][l,r] 0,1反转。 一共n个操作,每次操作后要输出最小位置的0。 题解: 经过分析观察,可以发现,答案 阅读全文
摘要:
题目描述: 题解: 正确性证明: 首先因为每两个中b都取大的那个,所以b一定满足条件 我们着重讨论a: 举一个有五个数的例子,设排序后有这样一个数列 a+k4+k3+k2+k1,a+k3+k2+k1,a+k2+k1,a+k2,a (k4,k3,k2,k1均>=0) 极端情况下我们取 a+k4+k3+ 阅读全文
摘要:
题目描述: 题解: 首先容易想到:当 i > n 时,n mod i = n 所以如果 m > n , ans+=((m-n)%mod)*(n%mod)%mod; m=n; 接下来考虑 i<=n 的情况: 后面这个东西很明显可以用数论分块算,时间复杂度是O(sqrt(N)) 但我当时做的时候还没有学 阅读全文
摘要:
题目描述: 题解: a[i] 实际就是字符串 i 在总集合中出现的次数,很自然地想到fail tree 注意:注释中的那段代码是不能用的 阅读全文
摘要:
题目描述: 题解: 正难则反,先求出让所有其它城市到达都城需反向几条边,再用总边数减去即可 f[i]表示以i为根的子树调整好需反向的边数 g[i]表示以i为都城需反向的边数 #include<iostream> #include<cstdio> using namespace std; const 阅读全文