您的位置:首页 > 其它

srm540 div1

2012-04-13 02:43 169 查看
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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: