poj 3779 hdu 3413 Single CPU, multi-tasking

题目链接: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;
}


你可能感兴趣的:(poj 3779 hdu 3413 Single CPU, multi-tasking)