2011年2月20日日曜日

Aizu Online Judge 0147 Fukushimaken

■0147 Fukushimaken

軽い実装ゲー.

  1. import java.util.*;  
  2. import java.lang.*;  
  3. import java.math.*;  
  4. import java.io.*;  
  5.   
  6. import static java.lang.Math.*;  
  7. import static java.util.Arrays.*;  
  8.   
  9. public class Main{  
  10.   
  11.  Scanner sc=new Scanner(System.in);  
  12.   
  13.  int INF=1<<28;  
  14.  double EPS=1e-9;  
  15.   
  16.  void run(){  
  17.   LinkedList<Integer> que=new LinkedList<Integer>();  
  18.   int[] wait=new int[100]; // 待ち時間  
  19.   int[] a=new int[17]; // 座っている客  
  20.   int[] rest=new int[17]; // 客が帰るまでの時間  
  21.   int[] b=new int[17];  
  22.   
  23.   for(int t=0;; t++){  
  24.    // 食事終了  
  25.    for(int i=0; i<17; i++){  
  26.     if(--rest[i]<=0){  
  27.      a[i]=-1;  
  28.     }  
  29.    }  
  30.   
  31.    // 新しい客  
  32.    if(t%5==0&&t<500){  
  33.     que.addLast(t/5);  
  34.    }  
  35.   
  36.    // つめられるだけつめる  
  37.    for(; !que.isEmpty();){  
  38.     int c=que.getFirst();  
  39.     int n=c%5==1?5:2;  
  40.     int j=-1;  
  41.     for(int i=16; i>=0; i--){  
  42.      b[i]=a[i]==-1?((i==16?0:b[i+1])+1):0;  
  43.      if(b[i]>=n){  
  44.       j=i;  
  45.      }  
  46.     }  
  47.     if(j==-1){  
  48.      break;  
  49.     }  
  50.     for(int i=j; i<j+n; i++){  
  51.      a[i]=c;  
  52.      rest[i]=17*(c%2)+3*(c%3)+19;  
  53.     }  
  54.     wait[c]=t-5*c;  
  55.     que.removeFirst();  
  56.    }  
  57.   
  58.    if(t>500&&que.isEmpty()){  
  59.     break;  
  60.    }  
  61.   }  
  62.   
  63.   for(; sc.hasNext();){  
  64.    println(""+wait[sc.nextInt()]);  
  65.   }  
  66.   
  67.  }  
  68.   
  69.  void debug(Object... os){  
  70.   System.err.println(Arrays.deepToString(os));  
  71.  }  
  72.   
  73.  void print(String s){  
  74.   System.out.print(s);  
  75.  }  
  76.   
  77.  void println(String s){  
  78.   System.out.println(s);  
  79.  }  
  80.   
  81.  public static void main(String[] args){  
  82.   // System.setOut(new PrintStream(new BufferedOutputStream(System.out)));  
  83.   new Main().run();  
  84.  }  
  85. }  

0 件のコメント: