
Codeforces 泛做
文章平均质量分 65
orz11111111
这个作者很懒,什么都没留下…
展开
-
CF 320D Psychos in a Line 链表维护(递增序列)
题意:给出长度为n的排列a, 每一轮同时删除若干个数,若a[i]n,a[i]最后的序列为非递减的,否则还能继续操作.每次删除的是一段连续的递减子序列(开头不删).当a[i]>a[i+1]时则删除a[i+1] 用链表来记录当前元素的下一个元素位置.也就是当a[i]>a[nxt[i]]时 删除a[nxt[i]] 然后令i=nxt[i]继续往下删除.然后用队列来维护当原创 2017-09-26 11:34:27 · 253 阅读 · 0 评论 -
CF 373D Counting Rectangles is Fun 单调栈+DP
题意:n*m的01矩阵,q次询问,每次询问左上角为(a,b),右下角为(c,d)的矩形中 有多少个全0的子矩形?n,mn,m类似二维前缀和 dp[a][b][c][d]=dp[a][b][c-1][d]+dp[a][b][c][d-1]-dp[a][b][c-1][d-1]+fun(a,b,c,d)calc计算(c,d)为右下角,左上不超出(a,b)时,有多少个全0子矩形原创 2017-09-27 14:17:54 · 334 阅读 · 0 评论 -
CF 820D Mister B and PR Shifts 差分(区间+k*(x-L)+b)
题意:给出[1..n]排列p 定义偏差值为segma(p[i]-i) i=1..n操作:将每个元素向后移一位,最后一个元素移动到开头.n操作一次,循环右移一次,最多n种不同排列.令d[i]为i次操作后的偏差值.现在考虑p[k]在d[i]中的贡献.d[0]+=|p[k]-k| d[1]+=|p[k]-(k+1)| ... d[n-k]+=|p[k]-n|,d[n-原创 2017-09-27 19:21:44 · 427 阅读 · 0 评论 -
CF 876F High City 单调栈,枚举,或运算
Problem F题意:给出长度为n的序列a,问有多少个区间[L,R]满足 a[L]|a[L+1]|...a[R] >max(a[L],...a[R]).n先用单调栈O(n)求出a[i]最为最大值的区间[L,R].找到a[i]最左边(右边)a[j] 满足 a[i]|a[i-1]|..a[j] >a[i] 即a[j]二进制中存在a[i]没有的bit.[x,y].即a[i]原创 2017-10-17 17:04:58 · 197 阅读 · 0 评论 -
CF 408C Triangle 勾股数+简单几何
题意:给出直角三角形的两条直角边长度a,b.并且三条边都不与坐标轴平行,问能否构造出满足题意的三个整数点.a,bemmm.什么时候无解呢? 因为三条边都不能平行于坐标轴 所以边一定是斜着的 又因为要整数点 所以在方格图中a一定可以表示为x^2+y^2=a^2所以a,b为勾股数.找到(x,y)满足 x^2+y^2=a^2 然后令其中一个坐标为(0,0). (-x,y) 和(p,q原创 2017-09-30 23:08:06 · 306 阅读 · 0 评论 -
CF 244 C. The Brand New Function 思维(二进制,区间或运算不同结果)
题意:给出序列a,f(l,r)=a[l] | a[l+1] |....|a[r] ('|'为或运算) n枚举左端点直接计算O(n^2)当左端点固定时,右端点增大,或运算的结果result是非递减的.并且每次增加都是 二进制某些个位变成1.d[L][i],对a[L]预处理出它后面第一个,二进制第i位为1的位置.d[L][i]=(a[L]>>i)&1?L:d[L+1][i]原创 2017-10-09 17:41:50 · 429 阅读 · 0 评论 -
CF 665F Four Divisors 1e11内素数个数(模板)
题意:D(n)定义为[1..n]中有多少个数,其因子个数正好是4个.给出n,求出D(n),nx的因子正好4个 则除去1,x之外 n的因式分解形式中 只能为p^3,p*q,(p,q为不同的素数).可以直接枚举n以内p^3个数.对于p*q形式 枚举小的因子p(pn点击打开链接#includetypedef long long ll;#define MAXN 100原创 2017-10-02 09:32:15 · 782 阅读 · 0 评论 -
CF 71C Round Table Knights 暴力
题意:一个圆上有n个点,每个点距离都相同,第i个点颜色颜色为黑色或者白色.n假如第i个点为起点,到下一个黑点距离为d,若i,i+d,i+2d,i+kd..,i都为黑点 则存在正多边形.枚举i和d,d必须为n的约数,并且距离为d时,起点有d个,暴力跳一下即可.O(n*D)(应该也可以分段来?本题似乎没有必要.,D为因子个数)注意对于d个起点 只要for一次序列,记c[num]原创 2017-10-02 20:07:53 · 352 阅读 · 0 评论 -
CF Unbearable Controversy of Being 489D 暴力
题意:n点m条边的有向图,问有多少个四元组(a,b,c,d)满足存在边(a,b),(b,c),(a,d),(d,c).n设f[a][b] 为a->b有多少条长度为2的路径枚举一个点a,在枚举它的边(a,d),在枚举d的边(d,b)即可.时间复杂度为O(2*m+n^2) 每条边都被枚举两次.f[a][b]有x条长度为2的路径 则(a,b)有C(x,2)个四元组原创 2017-10-03 09:32:38 · 208 阅读 · 0 评论 -
CF 112D. Petya and Divisors 枚举(标记倍数最后出现位置)
题意:n次询问[x[i],y[i]],每次问x[i]有多少个因子不能整除 x[i-y[i]]...x[i-1] 中的任意一个?n,x[i]暴力的做法:算出x[i]的因子 然后遍历[ x[i-y[i],..x[i-1]]判定 最坏(D*n^2).因为因子的个数不会很多 && x[i]如果last[kx]最后一次位置>=i-y[i] 则淘汰该因子.查询完一个数以后更新last即原创 2017-10-10 16:29:30 · 220 阅读 · 0 评论 -
CF 363D. Renting Bikes 贪心+二分
题意:n个人,m件物品 第j件物品价值p[j].现在有a元公共的钱,第i个人有自己的钱b[i].每人最多买一件物品.问最多有多少人能买到(一件)物品,并且求出最多人买到物品情况下 最小需要使用的私房钱总和? n,m先保证得到物品的人尽量多,则每个人能用私房钱就先尽量用 若最后还有剩下公共的钱则在补贴回去.把b,p按价钱排序.二分最多能买的件数x,核心:显然从私房钱多的人,即从第原创 2017-10-03 22:34:21 · 238 阅读 · 0 评论 -
CF 495C. Treasure 模拟(括号配对)
题意:给出字符串s,字符串包含'(',')','#' 先在将'#'替换成1个或者一个以上的右括号.|s|任意前缀i中右括号数量'#'至少为一个右括号 先放用一个右括号来替,核心:然后将已经配对的左右括号删除.若此时前缀多')'则无解.剩下的只能为:((((## 或者 C#C#CC#. 也就是只要最后一个为'#'即有解#include using namespace s原创 2017-10-04 09:14:02 · 245 阅读 · 0 评论 -
CF 483D Interesting Array 模拟+线段树
题意:m个约束条件,[l,r,v]表示区间[l,r]的数bitwise与运算的结果要等于v.n,mv二进制中为1的位,a[l]..a[r]中也都为1,v中二进制为0的位,[l,r]中我们可以不去考虑,和条件无关呀.先满足必要条件,利用差分,将[l,r]的第 bit位设置为1.然后在用线段树判断是否满足约束条件,如果不满足则无解,因为已经为1的位是固定,在怎么变动其它位也是无原创 2017-10-04 22:19:03 · 212 阅读 · 0 评论 -
CF 322C. Ciel and Robot 枚举+模拟
题意:初始在(0,0) 操作序列为s,该操作序列可以执行无数次.-1e9设x,y为做一次序列s产生的偏移量,f[i],h[i]为 序列s前缀i产生的偏移量.若存在解 则 a=kx+f[i],b=ky+h[i] k>=0 枚举i判定条件即可.注意i==0特判还有dx和dy等于0的情况.#include using namespace std;typedef long原创 2017-10-11 13:43:05 · 227 阅读 · 0 评论 -
CF 205 CLittle Elephant and Interval 分类讨论(计数) D(暴力,水题)
题意:给出[L,R],定义x为合法 当x的最高为和最低位相同 例如1021,9L,R现在求只关心最高位和最低位 现在枚举位数m.n的最高位hi当m小于n的位数 则开头有9种方案.每种对应中间有10^(m-2).当m==n的位数时当最高位当最高位==hi时 此时还要在分最低位是否>=hi 比如n=2451和n=2453 这两种情况.n=2453 则2..2原创 2017-10-11 14:44:08 · 274 阅读 · 0 评论 -
CF 548 D. Mike and Feet 单调栈(从大到小维护)
题意:给出序列a,定义f(l,r)为min(a[l],a[l+1]..a[r]) n用单调栈预处理出每个a[i]作为最小值时 能延伸到的左右端点[L,R].然后要更新ans[1...R-L+1]为max(ans[1..R-L+1],a[i]) 暴力点用线段树区间set操作,想想都麻烦,看到ans是非递增的 然后每次更新都又是前缀在预处理完序列a以后 将序列a用优先队列从原创 2017-10-11 18:55:50 · 217 阅读 · 0 评论 -
CF 443D. Andrey and Problem 贪心 or DP
题意:n个盒子,第i个盒子有奖品的概率为a[i].问选若干个盒子后,正好获得一个奖品的概率最大是多少?n假如选的是子集s,一共k个物品.则正好中一个奖品的概率为 tot=(p1*q2*..qk)+(q1*p2*..qk)+...(q1*q2...pk).现在设dp[i][j] 前i个物品选j个正好中一个奖品的最大概率.dp[i][j]=max(dp[i-1][j],dp[i原创 2017-10-12 15:56:40 · 198 阅读 · 0 评论 -
CF 376D. Maximum Submatrix 2 枚举+前缀和
题意:n*m(01)矩阵,操作:交换任意两行. 现在可以操作任意次.问能得到的最大全1子矩阵size为多少? n,m操作任意次 也就是将所有行重新排列一次.也可以将最后的行看作(1,2..n)的一个置换.则合法子矩阵h*w 其h不一定是连续的 但是每行的1~w都为1.暴力的做法:枚举结尾列,在枚举宽度,在O(n)确定该宽度所能得到的高度. O(n^3).同样枚举原创 2017-10-14 19:25:07 · 205 阅读 · 0 评论 -
CF 262 C. Maxim and Discounts 贪心(水)
题意:m种优惠,第i个优惠需要购买qi个物品 并且可以获得[0~2]个免费物品 免费物品价值不大于购买qi个物品中的最小值,每种优惠可以使用无限次.n个物品 价值为a[i].问买n个物品需要的最小价钱? n,m,q[i]当前价格最大的物品不能被免费赠送 只能直接购买,选出最小的q[i],每次买当前前q[i]大件物品后 选2件最大免费即可.#include using na原创 2017-11-01 09:53:05 · 263 阅读 · 0 评论 -
CF 312C. The Closest Pair 简单构造
题意:input nfor i from 1 to n input the i-th point's coordinates into p[i]sort array p[] by increasing of x coordinate first and increasing of y coordinate secondd=INF //here INF is原创 2017-11-01 10:41:04 · 238 阅读 · 0 评论 -
CF 879 C. Short Program 思维+二进制
题意:n次操作,初始某个数y(任意),操作:每次给出x[i],(AND,OR,XOR)三个运算的某一个.将y和x[i]作op运算.n二进制作运算 每一位单独考虑.某個bit位 经过若干次操作,最后只有4种情况:是否反转和设置为0/1.反转的bit位 用对应二进制为1的数XOR一次被置为0的位 用对应二进制位0的数AND一次被置为0的位 用对应二进制位1的数OR一次原创 2017-11-03 21:12:36 · 486 阅读 · 0 评论 -
CF 892D Gluttony 构造
题意:给出一个长度为n的序列a,要求构造出一个序列b.满足a和b.下标相同的子序列(长度!=n),其和都不同. n构造:若a[i]是序列的第j大 则令b[i]为序列的第j+1大(若a[i]为最大 则令b[i]为最小).证明:现在任意选一组下标s={x1,x2...xk}若s不含a最大值的下标 则b[x1,x2..xk] > a[x1,x2..xk]若s含a最大值的下标原创 2017-11-19 14:17:18 · 547 阅读 · 2 评论 -
CF 376C Divisible By Seven 同余+暴力
题意:给出n个数字,其中一定包含数字1,6,8,9.问是否能用这些数字组成一个数x 使得x被7整除. n能被7整除的数特征:末尾三位以前的数-末尾三位能被7整除.本题好像不能用上.a≡r(mod 7) b≡7-r(mod7) -> a+b≡0(mod7)因为一定有1689 把这4个数提出来 其余的数随便排列 假如此时余数为r.现在添加(1000*a+100*b+10*原创 2017-11-19 15:16:46 · 1251 阅读 · 0 评论 -
CF 888E Maximum Subsequence 折半搜索.
题意:给出n,m,问序列a中子序列之和mod m的最大值为多少?n直接O(2^n) TLE。n因为序列中的数#include using namespace std;typedef long long ll;const int N=40;ll n,m,a[N],b[N],c[N],n1,n2;vector f,h;void dfs(ll sum,int cur,原创 2017-11-19 15:57:12 · 365 阅读 · 0 评论 -
CF 895C. Square Subsets DP(状压,平方数)
题意:给出长度为n的序列a,问序列a有多少个子集,其乘积为平方数.n平方数其素因子的幂为偶数,70内有19个素因子设状态为19位二进制 第i位为0表示 第i个素因子的幂为偶数. 1代表幂为奇数.若一个一个加入数更新状态 则TLE 因为一个数加入偶数次和奇数次改变的状态是相同的 所以保存每个数的个数. 暴力更新状态即可 O( (1#include using na原创 2017-11-29 09:46:28 · 358 阅读 · 0 评论 -
CF 894 B/C 数学
Problem B题意:n*m矩阵 每格填入1或者-1.问每行每列的乘积都为k的方案数 n,m前i-1行 前i-1列任填 则最后一行和最后一列填入的方案是固定的.总乘积 k^n = k^m 若n,m奇偶性不同&&k==-1 则无解. 否则最后一格(n,m)一定不会有冲突(反证:分别填入x,y.)答案为2^(n-1)*(m-1) 快速幂算一下 (2^(n-1))^m-原创 2017-11-20 13:27:39 · 392 阅读 · 0 评论 -
CF 475D CGCDSSQ 枚举,思维+gcd
题意:给出长度为n的序列a,Q次询问:第i次询问x[i]:有多少个区间[l,r]的gcd为x[i]?n以a[i]开头的区间 随着区间长度增加 gcd是非递增的(套路阿.) 每次至少缩小一半 所以分界点不会超过loga[i]个.关键如何快速找到这些端点.可以用st表预处理出[l,r]的gcd值 二分最早变化的端点 O(n*log^3n) TLE.map(i原创 2017-11-21 19:44:58 · 271 阅读 · 0 评论 -
CF 155C. Hometask 思维+模拟.
题意:给出一个字符串s,k个二元组.二元组(a,b)表示字符a和字符b在字符串中不能相邻.(每个字符最多出现在一个二元组中).|s|先把相邻相同的都合并在一起.现在字符串为:a[1],x,y,a[4],a[5]....现在如果某个区间 出现:w,xyxyxyx,z (x,y)为矛盾 则要合法:删除该区间所有x或者删除该区间所有的y. 且删除后不会和相邻的产生矛盾.#incl原创 2017-12-10 17:49:14 · 293 阅读 · 0 评论 -
CF 863D. Yet Another Array Queries Problem 逆向思维,递归
题意:长度为n的序列a,q次操作.操作1:将[l,r]内的数右循环移一位,a[l]->a[l+1],...a[r]->a[l].操作2:将[l,r]内的数逆序,a[l]->a[r],a[l+1]->a[r-1]...a[r]->a[l].n,q直接暴力O(nq)超时 注意到只要查询操作后,数列中m个下标.若第Q次操作是[1,L,R] L#include usi原创 2017-12-11 09:01:48 · 276 阅读 · 0 评论 -
CF 900.C Remove Extra One 单调栈+BIT
题意:[1..n]的排列a. 定义a[i]合法:当所有j (1n定义f[i]为删除第i个数 能让答案的贡献增大多少,c[i]为第i个元素左边比它大的个数先用单调栈处理出每个元素左边第一个比它的大元素.当c[i]等于1 删除第i个元素左边第一个比它大的元素j 答案才有可能增加 让f[j]++,求出最大的f[j]即可.#include using namespace st原创 2017-12-12 09:31:08 · 559 阅读 · 0 评论 -
CF 899D Shovel Sell 思维.
题意:序列1,2....n. 问从中选出两个数(x,y) 要让x+y末尾9的个数最多.问有多少种方案? n先确定对于给定的n 末尾9的个数最多为多少? 假如末尾9的个数最多为x,则有 n+(n-1)+1>=10^x末尾有x个9 那么首位y :y99999. 1=[1..n]中有多少对(a,b)满足 a+b=y.如果y如果y>=n 受到n限制 (a,b)对原创 2017-12-20 16:22:32 · 231 阅读 · 0 评论 -
CF 900D Unusual Sequence 容斥
题意:问有多少个序列a.长度任意.序列a元素之和为y,序列a的所有元素的gcd为x. x,y由题意得:x * (b[1]+b[2]+...b[k])=y. gcd(b[1],b[2],...b[k])=1. (b[1]+b[2]+..b[k]) =y/x (不能整除则无解.)令n=y/x f(n)为序列gcd等于1,并且序列元素和为n的方法数.序列和要想为n,现在序原创 2017-12-12 22:04:10 · 294 阅读 · 0 评论 -
CF 893E 素因子分解+多重集排列
题意:Q次询问,第i次询问(x[i],y[i]) 问有多少个长度为y[i]的序列a,其乘积正好为x[i].Q先把x进行质因数分解得到{(k1*p1,k2*p2...ki*pi} n=k[[1]+...k[i], p[i]代表x的素因子,k[i]代表x素因子的幂 先放y个1到序列中.多重集组合:第i个素因子放入y个位置的方案为 C(y+cnt-1,cnt) (cnt个1,y-1个原创 2017-11-25 10:08:44 · 6993 阅读 · 0 评论 -
CF 161D Distance in Tree 树形DP(套路,路径长度为k点对)
题意:n个节点的树,问有多少对(i,j)其最短距离等于K.n设d[i][j][0/1]从节点i向下或者向上走长度为J的方法数.dp[i][j][0]+=dp[son][j-1][0].dp[i][j][1]+=dp[fa][j-1][1]+dp[fa][j-1][0] (i-fa->fa的前i-1个子树中,总是往左走)ans+=dp[i][k][1] 第i个点作原创 2017-11-25 18:15:36 · 540 阅读 · 0 评论 -
CF 903 E Swapping Characters 暴力
题意:k个字符串 每个字符串长度都为n.操作:交换某个字符串中任意两个位置的字符.k首先k个串中,任意两个串其字符出现频率都要相同,否则无解.先算出初始第一个串和其他串得汉明距离暴力枚举第1个串交换哪个位置.算出新的汉明距离 如果新得汉明距离==0或者2(字符频率相同 可以交换使得距离为0),.O(n^2*k).#include using namespace s原创 2017-12-13 20:24:27 · 503 阅读 · 0 评论 -
CF 792E Coloured Ballons 平方分割+枚举
题意:n种颜色的气球 第i种颜色气球有a[i]个 现在用盒子来装气球,条件:不能有空盒子,每个盒子只能装同种颜色的气球,任意两个盒子装的气球个数相差问最少需要多少个盒子把所有气球都装起来? n任意两个盒子气球个数差xa[1]为最小值,x最后通过枚举出的x 判定一遍即可 O(N*sqrt(a[1])).x判定方法: a[i]可以分成a[i]/x组 剩下a[i]%原创 2017-11-26 11:03:37 · 253 阅读 · 0 评论 -
CF 803C Maximal GCD 枚举,构造
题意:给出n和k 构造出k个数递增的数 满足这k个数的和为n 并且这k个的gcd尽量大.n,kk个数递增 则最小值为 mn=k*(1+k)/2 若mn>n则无解.假设k个数的gcd为d 则a[1]+a[2]+..a[k]=n= d(p[1]+p[2]+..p[k]) d为n的约数,现在枚举n的因子d 只要找到 p[1]构造:当1+..k#include us原创 2017-11-26 22:42:35 · 265 阅读 · 0 评论 -
CF 899E Segments Removal 链表+优先队列
题意:长度为n的序列a,操作:每次移除序列中,元素都相等并且长度最长的一段区间.(若有多个 移除最左边一个).n相同的合并成一个二元组(xi,ci) xi为数字,ci为xi的出现次数. .整个二元组序列用链表串起来.每次删除链表中c[i]最大的位置, n次,每次查询链表中最大值并且要跳的最大值所在位置 O(n^2) TLE...将链表所有节点压入优先队列中,对于合并时被删原创 2017-12-23 13:21:27 · 315 阅读 · 0 评论 -
CF 294C. Shaass and Lights 组合数学
题意:长度为n得序列a,初始a[i]为0或者1. 操作:如果一个a[i]为0 并且与a[i]相邻得至少有一个为1.则此时可以将a[i]变为1.n可以把序列分成若干个连续0:例如 ..10001.. 中间如果有x个0 则填成1的方案有2^(x-1)种.(x个位置 每个位置填L或者R 最后一个位置固定).现在连续0的个数分别为b[1],b[2]...b[k] 0的个数总共为m.原创 2017-12-14 22:13:41 · 408 阅读 · 0 评论 -
CF 846 D. Monitor 滑动窗口,k*k子矩阵最大值
题意:n*m的矩阵,初始全部为白色,Q次操作,第i次操作发生在时间ti,(xi,yi)变为黑色.问第一次出现k*k黑色子矩阵的时间? n,m二分时间 每次O(n^4)判断. TLE.. (后面发现正解是二分,然后令此时黑色为1,白色为0,用二维前缀和判断是否有k*k的子矩形即可)a[x][y] 为(x,y)变为黑色的时间,设f[x][y]为以(x,y)为左上角,边长为k的子矩形原创 2017-12-07 21:54:50 · 503 阅读 · 0 评论