标签:acm
2 2 3 2 -2 3 2 -2 -2 0
2 NO 1 Impossible
//题意是说这有个池塘,然后有许多泵可以抽水也可以放水问是否可以填满池塘。
分三种情况,可以填满需要多长时间,不能填满最少需要关掉几个泵,不能填满。
思路:先把每个泵的速度求出来然后按从小到大排序,置标志如果速度都是小于0 直接输出imposs,如果速度和大于0 则计算填满需要多长时间,否则则计算需要关闭几个duo
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 1.e-8 //控制精度
int main()
{
//freopen("a.txt","r",stdin);
//freopen("b.txt","w",stdout);
int n,a,i,flag;
double s,f[205];
int ss;
while(scanf("%d",&n)!=EOF&&n)
{
s=0.0;
flag=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
f[i]=1.0/a; //速度
s+=f[i]; //速度和
if(f[i]>0) flag=1; //标志位
}
sort(f+1,f+n+1);//从小到大排序
if(flag==0) printf("Impossible\n");
else
{
if(s>INF) //是正数
{
s=1.0/s;
ss=(int)s;
if(s-ss>INF)
ss++; //向上取整
printf("%d\n",ss);
}
else
{
for(i=1;i<=n;i++)
{
s-=f[i];
if(s>INF) break;
}
printf("NO %d\n",i); //需要关掉几个 duo
}
}
}
return 0;
}
标签:acm
原文地址:http://blog.csdn.net/u012773338/article/details/37927841