2019年ACM10月末总结第2/4段
sum=0;
judge(x);
for (int i=1;i<=y-1;i++)
{
sum=sum+a[i];
}
sum=sum + z ;
cout << sum << endl;
}
return 0;
}
错误分析
在cin 与scanf 转换之间不熟悉,while的括号内用cin用习惯了,不加!=EOF,但在使用scanf的情况下切记不可马虎。(因为这道题比较简单就不详解了)
1003.你能找到这个数字么
错误分析
(我是从头开始一道一道题做的)好吧,我承认我做不出这道题来。(一直到最后也没A出来)
在经历了四次超时后,当别人都A出好几题来的时候,当时间缓慢爬过一个多小时之后,我仍在做1003,自认为是简单题,可能这就是高估自己能力的代价吧。
啊,多么痛的领悟~~
啊,我想哭但是哭不出来~~
回顾一下我是怎么说服自己在超时一次后又把代码交上的
(1)三个for循环都是500的,肯定超时啦(我没考虑到,能力有限)
(2)所以第二次我就简单的加入了一行std::ios::sync_with_stdio();
思想简单的我以为这就行了,所以再挂一次。
(3)第三次我又把cin全都转换为scanf ,把cout全都转化为printf,以为这样能过,好吧是我单纯了。
(4)第四次,我终于长了点心眼从自己的程序入手,看能不能简化(自认为超时的程序是对的,毕竟样例过了,好吧,样例过了的,程序错的时候大有时候),我把程序中加入了break终止,以为这样可以阻止超时,当然现在看透一切的我对以前的我起不了任何歹心,毕竟是自己蠢。
在四次超时后,我实在是想不出任何办法了,才做的下一题(差距就此产生)
代码(在讲过之后又错了2次)
#include
#include
#include
usingnamespacestd;
inta[505],b[505],c[505],d[250005];
intmain ()
{
intL,N,M;
into=0;(不能写在while里,不然o的值在每次循环都会变为0;
while(cin>> L >> N >> M)
{
for(inti=1;i<=L;i++)cin>> a[i];
for(inti=1;i<=N;i++)cin>> b[i];
for(inti=1;i<=M;i++)cin>> c[i];
inttot=0;
for(inti=1;i<=L;i++)
{
for(intj=1;j<=N;j++)
{
d[++tot]=a[i]+b[j];
}
}
sort(d+1,d+1+tot);
intS;
cin>> S;
intnum;
cout<<“Case “<<++o <<“:“<<“\n“;
for(inti=1;i<=S;i++)
{
cin>> num;
ints=0;
for(intj=1;j<=M;j++)
{
intm=lower_bound(d+1, d+1+tot , num-c[j])-d;
if(d[m]==num-c[j])
{
s=1;
cout<<“YES“<< endl;
break;
}
}
if(s==0)cout<<“NO“<< endl;
}
}
return0;
}
知识点
(1)还是对++i和i++的理解不够
a[j++]=I 相当于 a[j]=I ; j++;
d[++tot]= a[i]相当于tot++; d[tot]=a[i];
以前我总是分开用,在括号内刚一看见还是有些不太习惯(人总得去适应不是)。
(2)关于lower_bound()和upper_bound()的常见用法
(当时师哥在讲lower_bound的时候我就是半懂非懂,br />
本章未完,请点击下一段进行阅读!