随笔分类 - codeforces
摘要:因为所有整数都能被唯一分解,p1^a1*p2^a2*...*pi^ai,而一次询问的数可以分解为p1^a1k*p2^a2k*...*pi^aik,这次询问会把所有a1>=a1k && a2 >= a2k &&...a3 >= a3k的数从原来的集合中分开。ai表示pi的幂。那么只有当这个数的素因子的...
阅读全文
摘要:不错的树形dp。一个结点能走多次,树形的最大特点是到达后继的路径是唯一的,那个如果一个结点无法往子结点走,那么子结点就不用考虑了。有的结点不能走完它的子结点,而有的可能走完他的子节点以后还会剩下一些点数。影响走的次数的是当前结点的点数,因为往子结点走是一定要回来的,进入这个结点要花费这个结点一个点数...
阅读全文
摘要:模拟题,map搞一搞。要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性。#includeusing namespace std;typedef map Node;map::iterator it...
阅读全文
摘要:线段树区间更新维护最小值。。。记得下放标记。。。如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变,会改变是因为一部分改变而另外一部分没有改变所以维护一下就好。询问的时候也要记得下放标记。。。数据结构快忘了,贴个板。#includeusing namespace std;type...
阅读全文
摘要:每个加油的站可以确定一个alpha的上下界,比如,第i次加油站a[i],前面加了i次油,a[i]*10≤ alpha*i using namespace std;typedef long long ll;ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }stru...
阅读全文
摘要:问题是求一个方案,实际隐含一个dp。法力是递减的,所以状态是DAG,对于一个确定的状态,我们贪心地希望英雄的血量尽量大。分析:定义状态dp[i][p][h]表示是已经用了i的法力值,怪兽的位置在p,怪兽的总血量为h时候英雄所具有的最大血量,采用刷表法,决策有:使用雷击,h变成h-L[p],p变成ma...
阅读全文
摘要:其实挺简单的。先直接算出之前已经排在k这个数前面的数字。比如543是三位的,那么100~543都是可以的,两位的10~54。如果还需要往前面补的话,那么依次考虑1000~5430,5430是上界不能选,10000~54300。有一种情况样例4是10000~10000,,这样是不会增加的应该输出'0'...
阅读全文
摘要:题意:在连通图中,求一条边使得加入这条边以后的消除的桥尽量多。在同一个边双连通分量内加边肯定不会消除桥的,求边双连通分量以后缩点,把桥当成边,实际上是要选一条最长的链。缩点以后会形成一颗树,一定不存在环否则和桥的定义矛盾,求树上的最远点对。树上的最远点对用dp TLE了,实际上两次dfs就行了,第一...
阅读全文
摘要:预处理+暴力,每个颜色都是独立的,求个前缀和,减一减判断一个在区间内颜色是否存在。算了算复杂度好像有点勉强,但是还是过了,学了主席树以后用主席树在做一下#includeusing namespace std;const int maxn = 1e4+4;const int maxm = 256;in...
阅读全文
摘要:打个表找找规律,到24445的时候乘2以后产生了0出现循环。一般地,判断循环节是否存在可以用Floyd判圈算法。#includeusing namespace std;typedef long long ll;int ans[]{-1,1,2,4,8,16,23,46,29,58,116,223,4...
阅读全文
摘要:用树状数组动态和查询修改排名。树状数组可以很方便地查询前缀和,那么可以利用这一特点,记录一个点在树状数组里最后一次出现的位置,查询出这个位置,就可以知道这个点的排名了。更改这个点的排名的时候只要把原来位置修改成0,然后在新的位置加上1就行了。把询问离线,数据范围比较大,先用快排+去重离散(用map也...
阅读全文
摘要:3e7暴力,800ms+过,单调队列维护区间最小值。#includeusing namespace std;typedef long long ll;const int maxn = 3e7+5;int x[maxn], dq[maxn], pos[maxn];int main(){ freo...
阅读全文
摘要:题意读懂了就好做了,就是求一下点双连通分量。维护一下一颗子树的结点数,对于一个结点当u是割点的时候,统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一下就好。最后加一下和u的子树上的连通分量总数和其它的结点的乘积。B,C中其中一者可以是A,所有最后还要...
阅读全文
摘要:不难发现在一次操作以后,hi=min(hi-1,hi-1,hi+1),迭代这个式子得到k次操作以后hi=min(hi-j-(k-j),hi-k,hi+j-(k-j)),j = 1,2,3...当k == min(hi-j+j,hi+j+j)时hi会变成0,因为min具有传递性,那么可以左右分开来考虑...
阅读全文
摘要:算一下复杂度。发现可以直接暴。对于u枚举a和b,判断一下是否连边,更新答案。#includeusing namespace std;int n,m;const int maxn = 4001;#define PB push_backvector G[maxn];bool g[maxn][maxn];...
阅读全文
摘要:优先队列模拟一下就好。#includeusing namespace std;priority_queueq;int main(){ int n; scanf("%d",&n); int t; scanf("%d",&t); for(int i = 2; i =t){ ...
阅读全文
摘要:简单题,求一下所有数的2和3的幂是任意调整的,把2和3的因子除掉以后必须相等。求lcm,爆了long long。我得好好反省一下,对连乘不敏感#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[ma...
阅读全文
摘要:D. Minimizationtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou've got array A, consisting of...
阅读全文
摘要:CNF 2 'In Boolean logic, a formula is in conjunctive normal form (CNF) or clausal normal form if it is a conjunction of clauses, where a clause is a ...
阅读全文
摘要:一个合法的三角形的充要条件是a=b+c+r,很容易转化为rusing namespace std;typedef long long ll;ll cal(int a,int b,int c,int tl){ int r = (a-b-c+tl)>>1; if(rtl) r = tl; ...
阅读全文

浙公网安备 33010602011771号