Pat 1014

一开始理解错题意了 WA了好几次
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main{
	public static void main(String args[]){
		Scanner in=new Scanner (System.in);
		int n=in.nextInt();
		int m=in.nextInt();
		int k=in.nextInt();
		int q=in.nextInt();
		int time[]=new int [k+1];
		for(int i=1;i<=k;i++){
			time[i]=in.nextInt();
		}
		int query[]=new int [q+1];
		for(int i=1;i<=q;i++){
			query[i]=in.nextInt();
		}
		int ans[]=new int [k+1];
		class node{
			int finish_time;
			List<Integer>q;
			node(){
				q=new LinkedList<Integer>();
			}
		}
		node l[]=new node[n+1];
		
		int cur=1;
		int flag=0;
		for(int i=1;i<=n;i++){
			l[i]=new node();
		}
		for(int i=1;i<=m;i++){
			for(int j=1;j<=n;j++){
				if((i-1)*n+j>k){
					flag=1;
					break;
				}
				l[j].q.add((i-1)*n+j);
			}
			if(flag==1){
				break;
			}
		}
		for(int i=1;i<=n;i++){
			if(l[i].q.size()>0){
				l[i].finish_time=time[l[i].q.get(0)];
			}
		}
		
		while(cur<=k){
			int min_time=999999999;
			int index=0;
			
			for(int i=1;i<=n;i++){
				if(l[i].q.size()>0){
					if(l[i].finish_time<min_time){
						min_time=l[i].finish_time;
						index=i;
					}
				}
			}
			ans[l[index].q.get(0)]=l[index].finish_time;
			l[index].q.remove(0);
			
			if(flag==0){
				if(k-cur<n*m){
					flag=1;
				}else{
					l[index].q.add(cur+n*m);
					//System.out.println(index+" "+(k-cur-n*m));
				}
			}
			if(l[index].q.size()>0){
				if(l[index].finish_time<540){
					l[index].finish_time+=time[l[index].q.get(0)];
				}else{
					l[index].finish_time=999999;
				}
			}
			cur++;
		}
		for(int i=1;i<=q;i++){
			int tt=ans[query[i]];
			if(tt>90000){
				System.out.println("Sorry");
			}else{
				int h=tt/60+8;
				int min=tt-(h-8)*60;
				String at=((Integer)h).toString(),am=((Integer)min).toString();
				if(h<10){
					at="0"+at;
				}
				if(min<10){
					am="0"+am;
				}
				System.out.println(at+":"+am);
				
			}
			
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值