1 、自信的不看样例说明,自信的不手推一下样例,自信的认为选2个点就一定不能重复选
然而样例说明举例子举得清清楚楚有重复
2、自信的不看输出说明,自信的认为最后一行输不输出换行无所谓
然而输出说明清清楚楚写着最后一行不输出空格
3、读入优化写成x=1,还去问学长为啥x=1之后会一直输入不停止
学长:你输入的n值变了当然会让你继续输入。。。。。。
4、知道看输入说明了,不认真看,一周内第三个关于读题的错误
第一行就写着Multiple test cases, process to the end of input
——持续更新
5、多组数据,知道数组要清0,漏了变量也要清0
因为变量top没清0,一个下午荒废了
6、洛谷 p3615 https://www.luogu.org/problem/show?pid=3615
输出一个整数,表示答案。如果无论怎么样都没办法N分钟之内达成,请输出-1
题目不会做怎么办,直接输出-1啊,20分
7、下午做了6到网络流,6次因开小空间RE
写代码之前先算好边数
8、网络流根据题目描述统计边、再将统计出的边转图
2次使用邻接链表,tot,front,next混淆,卡了2小时
9、费用流跑最大费用,dis数组初始化为-1
应该初始化为-inf,因为反向弧的费用为负,未访问过的点不置为负无穷无法完成回流
10、长为n的字符串读入后移一位,相应的数组开到n+1
应该是至少n+2
11、二维树状数组
void change(int a,int b,int w)
{
for(;a<=k+1;a+=lowbit(a))
for(;b<=m;b+=lowbit(b))
c[a][b]=max(c[a][b],w);
}
应该是
void
change(
int
a,
int
b,
int
w)
{
for
(
int
i=a;i<=k+1;i+=lowbit(i))
for
(
int
j=b;j<=m;j+=lowbit(j))
c[i][j]=max(c[i][j],w);
}
12、输出格式:每组数据之间空一 13、题目没有说忽略行末空格
14、一个点可以八方向扩展,有一些荷叶,向第一次跳到水里的位置连边,每个点可以连不止8条边
15、
在预处理答案O(1)出结果题中
如果很容易判断出0、1等数不合法或答案为0,那么也不能忽略,根据题意赋值为0等其他数
否则会无输出
16、
dp中有一维表示模几的结果时,
dp[i][j][k] 前i位二进制 有j个1 值模m等于k 的数的个数
那么预处理
dp[1][0][0]=1;
dp[1][1][1]=1;是错误的应该为
dp[1][0][0%m]=1;
dp[1][1][1%m]=1;
17、乘法比除法快,所以在dfs剪枝时,除法转化为乘法,但忽略了整数类型上限
http://www.com/TheRoadToTheGold/p/7436234.html
18、无向图tarjan if(to[i]==pre) continue; 其中pre 指父节点,错误!! 若 a--b b--a 从a跑向b之后可以从b再跑回a 正确的方式 if(i==(pre^1)) continue; 其中pre表示边的编号,边从2开始存储
19、bfs不判重bfs不判重bfs不判重bfs不判重bfs不判重
20 vector 是从0开始用的
21 n个点n条边是环套树森林,不是环
22区间加,求区间第k大,k<=10
将前10大全部放到一个结构体里,query时直接返回结构体
合并的时候 重载的 加号 运算符
所以 标记 不能放到 结构体里
下传标记的时候,只传前10大,但应先判断是否具有第i大
23、多次声明STL 极慢
24、涉及到多次循环操作,两个数组轮换
25
错误的二分左右端点方法(以and为例):
即每次判断是否同时满足>=a <=b
这样不满足单调性
while(l<=r)
{
。。。。。。
if(res>=a && res<=b) al=mid,r=mid-1;
else l=mid+1;
}
while(l<=r)
{
。。。。。。
if(res>=a && res<=b) ar=mid,l=mid+1;
else r=mid-1;
}
比如在二分右端点时,算出mid >b
此时应该右移mid 使结果变小
但在上面代码中不满足 if 条件,mid 左移
正确的二分方式:
while(l<=r)
{
。。。。。。
if(res<=b) al=mid,r=mid-1;
else l=mid+1;
}
while(l<=r)
{
。。。。。。
if(res>=a) ar=mid,l=mid+1;
else r=mid-1;
}
即注意二分的单调性
26
st 表 倍增预处理 数组越界
27、合并连续的相同的一段
for(int i=1;i<=n;++i)
{
if(a[i]!=a[i-1] || i==1)
{
col[++cnt]=a[i];
num[cnt]=1;
}
else num[cnt]++;
}
要特判i==1,不然a[1]可能会等于a[0]
28、三分50次,WA了两个点,三分100次AC
29
多个可持久化单调队列,头尾指针相连
如果头尾指针是左闭右闭
如果队列为空,tail<head,导致 后一个队列的尾指针=前一个队列的头指针
这样尾指针替换更改,记录的替换位置为tail,即前一个队列的head
退出dfs替换回去 错误的替换了前一个队列的head
头尾指针左闭右开就不会有这个问题
30、
int j
x &(1<<j),这样得到的j是一个int,不是bool!!!
作者:xxy