2012/6/3 | TopCoderSRM 814 Div One 250pt | 给定若干人的选举得到的比率,求总投票人数的最小值 | 近似,精度 | 大意:对于一定的人数,根据“四舍五入”的规则,可以有一定的人数的范围,,注意前者要和0取较大值,一般程序中为枚举n<1000 问题:总的枚举的人数的上限是多少? 嘉哥说明了一个方向,如果能够证明对于n>1000存在的解,肯定可以通过n<1000,来得到,那么确实只要枚举n<1000的就可以了。 | 1/3 |
class ElectionFraudDiv1
{
public:
double max(double a, double b) {
if (a > b) return a; else return b;
}
int MinimumVoters(vector <int> percentages)
{
bool flag;
int t, sa, sb, a, b;
for (t = 1; t <= 10000; t++) {
flag = true;
sa = sb = 0;
EACH(p, percentages) {
a = int(max(0,ceil(t*(*p-0.5)/100)));
b = int(ceil(t*(*p+0.5)/100)-1);
if (a > b) { flag = false; break; }
sa += a; sb += b;
}
if (flag && sa <= t && t <= sb) return t;
}
return -1;
}