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 />
本章未完,请点击下一段进行阅读!

章节目录