srm540 div1
2012-04-13 02:43 macaroniz 阅读(138) 评论(0) 收藏 举报250pt
很简单,让a1作为方程的自由元,然后判断即可,但是细节很多,很考察代码能力。
写的有点丑,不想改了。
class ImportantSequence { public: long long maxx(long long a,long long b) { return a > b ? a : b; } long long minx(long long a,long long b) { return a < b ? a : b; } long long maxx2(long long a,long long b) { return a > b ? a : b; } long long minx2(long long a,long long b) { if(a == -1) return b; if(b == -1) return a; return a < b ? a : b; } int getCount(vector <int> B, string operators) { long long k = 1,c = 0; vector<long long> larr,rarr; for(int i = 0;i < operators.length();i++) { if(operators[i] == '+') { k = -k; c = B[i] - c; } else { c = c - B[i]; } //printf("k:%I64d c:%I64d\n",k,c); if(k > 0) { if(c % k != 0) larr.push_back(maxx(1,(long long)(-1.0*c/k))); else larr.push_back(maxx(1,(long long)(-1*c/k+1))); rarr.push_back(-1); } else if(k < 0) { larr.push_back(1); if(c % k != 0) rarr.push_back(maxx(0,(long long)(-1.0*c/k))); else rarr.push_back(maxx(0,(long long)(-1*c/k-1))); //printf("2:%I64d\n",(long long)(-1.0*c/k)); } } long long maxl = 1,minr = -1; for(int i = 0;i < larr.size();i++) { //printf("%I64d %I64d\n",larr[i],rarr[i]); maxl = maxx2(larr[i],maxl); minr = minx2(rarr[i],minr); } if(minr == -1) return -1; if(maxl > minr) return 0; return (int)(minr - maxl+1); } };
浙公网安备 33010602011771号