Yurchiu 的 OI 方面的错误档案。模板:
<details><summary> XXX </summary>
时间:
详情:
</details>
Code
结构体里面的数组一定要初始化!!!!!!
不管什么变量,初始化就完了!!!!!!
“十年 OI 一场空,不开 LL 见祖宗”。即开变量不考虑数据范围。
时间:2020-10-03
详情:打 trie,为了卡空间,竟用 char
类型数组作为儿子数组。链接
struct Trie片段:
struct Node
{
char son[10],exist;
~~~~~~~~~^建议:使用int
}node[500000+10];
--------------------------------------
void insert(char s[])片段:
for(int i=0;i<=len-1;i++)
if(!node[root].son[sons])
node[root].son[sons]=++index;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^警告:有溢出风险
dp 一定要初始化。
时间:2020-10-24
详情:
- dp 不初始化,WAWA两行泪:https://www.luogu.com.cn/record/40380312 。
- dp 初始化错误,WAWA两行泪:https://www.luogu.com.cn/record/40386016 。
- 终于过了(\kk):https://www.luogu.com.cn/record/40390920 。
一定要合理分配时间,在考场上千万不要死磕一道题!
时间:2020-11-07
详情:CSP-S 考场。由于对 T1 过于自信,花了 2.5h 做(考试时间 4h)。最终放弃,也导致错失了 AC T2 的机会。
注意 C++ 的毒瘤语法。
时间:2020-11-27
详情:做 [THUPC2019]鸭棋 这个题时,发现判断是否能下棋的函数总是返回“是”。看了看我的一长串 switch 中的 case 语句。嗯,好的,原来是…
注意程序细节,不要大意。
时间:2021-02-12
详情:计算两点之间距离公式:sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
。把 x1
,x2
,y1
,y2
的位置搞反了。
定义常量“最大值”也要注意溢出。
时间:2021-02-13
详情:不光“最大值”本身防止溢出,在与其他变量参与比较、运算时也要防止溢出。
- https://www.luogu.com.cn/record/46547174 诶?为什么 80 分?常量
Inf
太小了?调大试试。 - https://www.luogu.com.cn/record/46547223 调大了些。变成 60 分。看错误信息,居然出现负数。
- https://www.luogu.com.cn/record/46547246 调得比第一次还小。过了。
两层循环时,注意 i 和 j 的区别。
时间:2021-02-13
详情:https://www.luogu.com.cn/record/46963579
//以上记录的曾经版本是:
for(int i=0;i<=n-1;i++)
{
if(dead[i]) continue;
for(int j=head[i];j;j=e[j].nxt)
if(!dead[e[i].to])//!
union_(e[i].to,i);//!
}
注意数组大小!
时间:2021-02-13
详情:数组越界不一定是 RE,还可能是 WA!https://www.luogu.com.cn/record/46998743
const int M=20000+10,N=10000+10;//分别为边数、点数常量
int n,m,s,t,ans=0,val[N],v[N];//val 数组存的是边权!
函数中数组的传参。
时间:2021-07-16
详情**:注意!函数中数组传参是传址**!也就是说,在这个函数中,你对这个数组的操作会影响到原数组!
//https://www.luogu.com.cn/problem/P7724 错误解
//原因:dfs 中的 a 数组
#include<bits/stdc++.h>
using namespace std;
namespace _yz
{
const int x[]={0,0,0,1,-1};
const int y[]={0,1,-1,0,0};
int A[3][3],B[3][3],c[114514];
void dfs(int a[][3],int b[][3])
{
/*printf("ROUND %d\n",opt);
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
printf("%d ",b[i][j]);
printf("\n");
}*/
c[a[1][1]*1000+a[1][2]*100+a[2][1]*10+a[2][2]]=1;
int flag=1;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
if(a[i][j]!=b[i][j])
{
flag=0;
break;
}
if(flag==1)
{
printf("Yes\n");
exit(0);
}
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
for(int k=1;k<=4;k++)
{
int nx=i+x[k],ny=j+y[k];
if(nx<1||nx>2||ny<1||ny>2) continue;
if(a[nx][ny]!=0&&a[i][j]!=0) continue;
swap(a[i][j],a[nx][ny]);
if(c[a[1][1]*1000+a[1][2]*100+a[2][1]*10+a[2][2]]==1) continue;
dfs(a,b);
swap(a[i][j],a[nx][ny]);
}
}
}
c[a[1][1]*1000+a[1][2]*100+a[2][1]*10+a[2][2]]=0;
}
void yzmain()
{
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
scanf("%d",&A[i][j]);
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
scanf("%d",&B[i][j]);
if(A[1][1]==0&&A[1][2]==0&&A[2][1]==2&&A[2][2]==0&&B[1][1]==0&&B[1][2]==2&&B[2][1]==0&&B[2][2]==0)
{
printf("No\n");
return;
}
dfs(A,B);printf("No\n");
return;
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
_yz::yzmain();
return 0;
}
注意尽量不要省花括号
时间:2021-10-16
详情:还是 [THUPC2019]鸭棋 这个题。快一年多了,今天来 debug,最终发现原来是少加了两个花括号。然后就 A 掉了。
注意如果不加花括号,极有可能带来 if-else 的误配对,以及更多……
Individual
P1505 [国家集训队]旅游。思路是增加边点(把两个点之间塞入一个点,作为边权)。所以要注意不要把非边点的 max,min,data 错误地赋上值。为了不影响操作,将 max 赋值为 -inf,min 赋值为 inf,data 赋值为 0。交了 5 次,0 分。第六次,加上是否为边点的判断,100 分(其实还有其他的小错误)。
P1312 [NOIP2011 提高组] Mayan 游戏。
不要使情绪太激动(严肃地)。
数组尽量往大了开。
注意,由于函数内定义数组是未初始化的(值不一定是 0),导致在判断块的颜色出现次数时桶数组越界,块下落时把奇奇怪怪的值落下来了。
记得调用 memset 函数所增加的时间复杂度。
注意 knowledge 单词的拼写。
Knowledge
# 1:dijkstra 若未使用任何优化,时间复杂度为 。借助优先队列等,时间复杂度则为 。
# 2:1948 年,克劳德·香农将热力学中的熵引入信息通信领域,标志着信息论研究的开端。
# 3:二项式定理:。
本文作者:Yurchiu
本文链接:https://yz-hs.github.io/f1c417b84c83/
版权声明:本博客中所有原创文章除特别声明外,均允许规范转载,转载请注明出处。所有非原创文章,按照原作者要求转载。