那些年的那些**错误
这里是一个总结,也可以是大家的提醒
而且,我才不会告诉你是哪题呢
各路大佬有什么避免这些错误的方法可以在下面评论!!!
不该犯的
变量名写错
double ans=0x7ffffff;
void DFS(double now,int num,int sum)
{
if(sum==n){
ans=min(ans,now);
return ;
}
if(now>sum)
return ;
...
}
看到错误了吗?
没有?咦?为什么now
与sum
比较呀?
int
为什么与double
比较呢?
正确代码:
if(now>ans)
return ;
DP结果输出错误
for(i=0;i<=g[1];i++)
for(j=0;j<=g[2];j++)
for(k=0;k<=g[3];k++)
for(l=0;l<=g[4];l++){
int move=1+i+2*j+3*k+4*l;
if(i!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]+a[move]);
if(j!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]+a[move]);
if(k!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]+a[move]);
if(l!=0) f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]+a[move]);
}
cout<<f[g[i]][g[2]][g[3]][g[4]]<<endl;
return 0;
这个错误太明显了,但是我依然调了半个上午……
好吧,我知道你看出来了,我输出了一个神奇的变量:f[g[i]][g[2]][g[3]][g[4]]
!!!
正确写法:
cout<<f[g[1]][g[2]][g[3]][g[4]]<<endl;
return 0;
少写一条语句
string ans="";
void zk(int n)
{
if(s[n-1]>=s[n+1]){
ans+=s[n];
return ;
}
if(s[n+1]-1==s[n-1])
return ;
string an="";
int i,j;
for(i=s[n-1]+1;i<=s[n+1]-1;i++)
for(j=1;j<=p2;j++){
if(p1==1)
an+=(char)i;
else if(p1==2)
an+=(char)(i-32);
else
an+='*';
}
if(p3==2)
reverse(an.begin(),an.end());
ans+=an;
}
void sk(int n)
{
if(s[n-1]>=s[n+1]){
ans+=s[n];
return ;
}
if(s[n+1]-1==s[n-1])
return ;
string an="";
int i,j;
for(i=s[n-1]+1;i<=s[n+1]-1;i++)
for(j=1;j<=p2;j++){
if(p1==3)
an+='*';
else
an+=(char)i;
}
if(p3==2)
reverse(an.begin(),an.end());
}
这是一条简单的错误,我用了一个小时把他找出来了
没错,这两个函数特别对称,所以,所以…所以……
sk
函数里好像少了一句话?
补上她,顺利AC
void sk(int n)
{
if(s[n-1]>=s[n+1]){
ans+=s[n];
return ;
}
if(s[n+1]-1==s[n-1])
return ;
string an="";
int i,j;
for(i=s[n-1]+1;i<=s[n+1]-1;i++)
for(j=1;j<=p2;j++){
if(p1==3)
an+='*';
else
an+=(char)i;
}
if(p3==2)
reverse(an.begin(),an.end());
ans+=an;
}
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴!