题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3413 http://poj.org/problem?id=3779
这是一道模拟题,但是因为数据量很大直接模拟的话很大可能超时,我就超了一次,可能是处理不好,后来改为每次找所有数中整数部分最小的,这样就过了。
做这类模拟题主要就是注意细节,细节处理好了一般都能AC。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxx=105;
double da[maxx];
double time[maxx];
int main(){
int T,n,temp;
scanf("%d",&T);
for(int cas=1;cas<=T;cas++){
printf("Case %d:\n",cas);
double ans=0;
int zh=0;
double minn;
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++){
scanf("%lf",&da[i]);
}
for(i=0;i<n;i++){
minn=1e10;
for(j=0;j<n;j++){
if(da[j]<=0)continue;
zh=(int)da[j];
if((double)zh==da[j])zh--;
if(zh<minn)minn=zh;
}
for(j=0;j<n;j++){
if(da[j]<=0)continue;
da[j]-=minn;
ans+=minn;
}
for(j=0;j<n;j++){
if(da[j]<=0)continue;
if(da[j]<=1.0){
ans+=da[j];
da[j]=0;
time[j]=ans;
continue;
}else{
da[j]-=1.0;
ans+=1.0;
}
}
}
//printf("%.2lf",time[0]);
for(i=0;i<n;i++){
printf("%.2lf\n",time[i]);
}
}
return 0;
}