您的位置:首页 > 其它

Pat 1014

2012-02-17 19:13 190 查看
一开始理解错题意了 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);

}

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: