易错点以及技巧:
1、忘删调试信息
2、没开longlong,一些爆longlong的题没有与INF取min
3、求SCC应该把sccno赋成scccnt
4、矩阵乘法把mod写在第二层会快很多
5、写高精度错误估计了位数
6、注意读题:路径是点不相交还是边不相交
7、写完高精度一定要手造大样例,并考虑是否压位
8、高精度压位时注意输入输出的变化(还有数组大小)
9、注意读题:输出的答案到底是什么东西
10、搜索时(如果可以交换顺序)注意先算比较容易确定的点(看实际运行时间吧。。。)
11、注意while的边界
12、有时一些函数可以直接求到极值点,但是要同时验证端点
13、尽量先想简单的方法解题
14、树链剖分时要把siz初始化为1!!!否则会TLE!!!小数据根本看不出来(或者可以手造大数据测一下(1000以内对拍正确性)(100000估算时间复杂度)(想方设法把自己卡ToT))
15、构造转移矩阵的时候注意手动验证自己矩阵的正确性,注意初始矩阵
16、环形均分纸牌:
if(T%n==0){
int tmp=T/n;
for(i=1;i<=n;i++)
cntx[i]=cntx[i-1]+cntx[i]-tmp;
sort(cntx+1,cntx+n+1);
for(i=1;i<=n;i++)
ansx+=1ll*ab(cntx[(n+1)>>1]-cntx[i]);
}
17、一些爆搜题可以转为图论来做会让爆搜更简单
18、求a/b在c进制下的混循环节:
(技巧(常识):,假设a/b是最简分数,则M是混循环长度,R是纯循环长度)
然后要做的事情就是把左边的a/b变成右边,可以先求M再把b剩余的因子配成
即找到最小的R使:
移一下项:
由于c和b/gcd(b,c^M)已经互质了,于是可以BSGS,也可以暴力(如果b/gcd(b,c^M)比较小)
先换一下元
如果考虑暴力,由欧拉定理可知
于是可以枚举phi(T)的因数,然后快速幂验证,没了
LL cal(LL A,LL B)
{
LL x=phi(B),y=x;
for(int i=2;1ll*i*i<=x;i++){
if(x%i==0){
while(y%i==0&&ksm(A,y/i,B)==1)y/=i;
while(x%i==0)x/=i;
}
}
if(x>1&&ksm(A,y/x,B)==1)y/=x;
return y;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
LL a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
LL g=gcd(a,b);
a/=g,b/=g;
int M=0;
while(1){
LL x=gcd(b,c);
if(x==1)break;
b/=x;M++;
}
printf("%d %lld\n",M,b==1?0ll:cal(c,b));
}
}
19、有一些感觉需要DP的问题可以通过贪心来解决,但要给自己举反例
20、多尝试:逆向思维(删边变加边等),二分答案,转图论……
21、二分图匹配时注意x部y部的点数,x编号1~n,y部编号n+1~n+m
22、一些RMQ问题没有修改就尽量用ST表
23、尽量发现枚举中的单调性,这样可以少一个n
24、一定不要写SPFA,写堆优化Dijkstra(当然不是绝对的,CSP应该不会卡SPFA吧。。。)
25、manacher一定要小心,if(i
26、WQS二分,限制什么的个数就对什么加权!!!!!!!!!(千万不要所有的点都加权啊啊啊啊)
如果要DP就尽量用结构体来存DP值和已选个数
27、线段树模拟费用流?实际上就是线段树模拟可以反悔的贪心
28、看到+1-1就尽量往括号匹配、卡特兰数方面想
29、计算有限制的路径方案数一定要从它的本质入手,不要乱推式子、纸上谈兵
30、如果有样例解释的话一定要看样例解释(这样就不用枚举题意了)
31、判断完全平方数不要用sqrt(x)*sqrt(x)==x要int(sqrt(x))*int(sqrt(x))==x
32、考虑全面,想出一个解一定要想方设法hack掉自己,如果hack不掉就是正解了
33、bfs的时候要在入队的时候打vis标记,否则会T(因为出队的时候打标记不能保证转移的过程中没有重复状态,可能重复转移队中的元素)
34、有些DP看起来不会爆longlong(或int),但在计算途中可能会把多个INF加起来,然后爆掉longlong。。。
35、取模的时候(……)%=mod不要写成(……)%mod !!!!
36、写堆优化Dijkstra的时候一定要把dis前面加负号,不然更新的顺序就是反的,然后T飞。。。
37、带入询问次数m时不要带成n!!!!
38、不要随便缩小二分的总范围
39、DP的时候注意细节,不要随便用总体的值来运算(比如在枚举物品是否选不要用sum-lsum来计算rsum)
40、结构体DP注意比较的优先级,不能用优先级来确定能否转移一个点(有可能它在某一个点的优先级比较高,但是这个点是不能转移的)——来自洛谷的某场比赛T1
41、有向无环图遍历必须打vis!!!(T过两次了。。。)
42、注意是有向图还是无向图,加边一定不要错!!!!
43、注意点边的编号是从0开始还是从1开始!!!!
一些想要复习的东西:
1、概率期望DP √
2、构造DP(求字典序第k大的解)
3、排名DP、数位DP(求当前解的排名)
4、二分图 √、km、网络流、费用流
5、kmp、AC自动机
6、贪心 √
7、带权并查集
8、splay √、LCT、左偏树 √、KDtree、Trie树贪心 √
9、分块、莫队 √
想学的东西:
1、Treap √
2、李超线段树 ?、吉司机线段树 √
3、后缀自动机、后缀数组
4、杜教筛、min25筛
考试策略:
1、先仔细审题,如果秒切,先不要急着打,要举几个例子来验证(可以直接证明就更好),敲代码之前一定要保证自己是对的
2、如果没有秒切,先不要慌,心里想着:这道题其实很简单,然后从问题的数据范围入手,先解决小范围数据,步步为营
3、不要想写什么就写什么,也不要不想写什么就不写什么
4、一般前两道题都是比较简单的,不要想复杂了,不要降智,写完前两道题,第三题如果时间够且想出了正解,就直接写,否则就暴力吧
5、考试结束之前一定要检查freopen,文件名,数组大小,各种调试信息有没有删掉,ctime不要用……
6、如果有大样例一定要测