码迷,mamicode.com
首页 > 其他好文 > 详细

一次高昂的学费

时间:2014-07-06 17:43:50      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   问题   

//http://main.edu.pl/en/archive/oi/20/tak
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; typedef long long LL; #define rep(i,n) for (LL i=1,n__=n;i<=n__;i++) #define repb(i,b,n) for (LL i=b,n__=n;i<=n__;i++) LL d,m,n; const LL mN=1000000+10; LL a[mN]; int main() { // freopen("tak9a.in","r",stdin); // freopen("9a.out","w",stdout); cin>>d>>m>>n; // cout<<d<<‘ ‘<<m<<‘ ‘<<n<<endl; rep(i,n) cin>>a[i]; sort(a+1,a+1+n); bool can=true; LL ans=0; LL ren=-m; if (a[n]<d-m) { can=false; goto ianss;//首先是这里,由于我已经把can搞成false了,我想怎么搞最后都会输出0。。。但im无初值RE了就挂了 }        // LL im; rep(i,n) if (a[i]>=d-m) { im=i; break; } LL i; for (i=n;i>=1;i--) { // cout<<"i="<<i<<"\‘ren="<<ren<<endl; if (i==im) { if (ren*2>=((d-m)-a[im])) { ans=n-i+1; break; } continue; } if (a[i]+ren>=0)//其次是这个if,由于我在第一遍写的时候写了这个,脑海里一直觉得没什么了问题了,于是就没管了 ren=ren*2+a[i]; if (i>im) { if (ren>=d-m) { ans=n-i+1; break; } } else if (ren*2>=((d-m)-a[im])) { ans=n-i+1; break; } if (ren>=0) ren=0; } // cout<<n<<‘ ‘<<i<<endl; // for (LL j=n;j>=i;j--) // cout<<a[j]<<endl; ianss: if (can && ans>0) cout<<ans<<endl; else cout<<0<<endl; // cout<<n<<endl; // for (int i=1;i<=n;i++) // cout<<a[i]<<endl; return 0; }

这两个错误都有一个共同点,就是觉得虽然结果已定,但觉得后面肯定不会出问题,于是没写特判,放着不管,导致了严重的错误。

1.任何不确定的情况,写特判。然后做剩下的情况,虽然代码可能会变丑,但可读性和准确性都得到了提高。

fight!!!

一次高昂的学费,布布扣,bubuko.com

一次高昂的学费

标签:style   blog   http   color   os   问题   

原文地址:http://www.cnblogs.com/vecd/p/3825083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!