SRM 481 Div2
久しぶり(1ヶ月ぶり)のSRM。理想のパターン。
250: CircleMarket
実際に回るだけ。なぜか時間がかかってしまいました。
public class CircleMarket{ public int makePurchases(int[] a,int []b ,int c){ boolean buy[]=new boolean[a.length]; int d=b.length; for(int i=0;i<b.length;i++){ for(int j=0;(d*j+i)*c<=b[i];j++){ if((d*j+i)*c>=a[i]){buy[i]=true;break;} } } int ret=0; for(int i=0;i<b.length;i++)if(buy[i])ret++; return ret; } }
500: ChickenOracle
こういう問題は苦手。必要十分条件なのか必要条件なのか十分条件なのかわからない。たぶんif書き間違えたんだろうな。
Div1に居たらこれが250になるんですね。きついです。
↓は落ちる
public class ChickenOracle{ public String theTruth(int a,int b,int c,int d){ boolean egg=false; boolean niwatori=false; //TAKESHI for(int i=0;i<a;i++){ int A,B,C,D; C=i; B=c-C; D=d-C; A=b-C; if(A+B+C+D==a&&A>=0&&B>=0&&C>=0&&D>=0){ egg=true; System.out.println(i+" EGG"); } } //TAKESHI for(int i=0;i<a;i++){ int A,B,C,D; D=i; A=c-D; C=d-D; B=a-b-D; if(A+B+C+D==a&&A>=0&&B>=0&&C>=0&&D>=0){ niwatori=true; System.out.println(i+" CHICKEN"); } } if(niwatori&&egg)return "Ambiguous"; else if(niwatori)return "The chicken"; else if(egg)return "The egg"; else return "The oracle is a lie"; } }
900: BatchSystem
よく見る問題。普通にやるだけ。ってのも難だな〜
HashMapにString,Longで保存して足し算かなんかをやって小さい順に取り出していく。人数は50人なのでてきと〜にたくさんループをまわしても間に合ってしまう。
ただしintを使うと終わるよ!! (実際私はResubmitしたのですが)
でもどうしてこんなにめちゃくちゃなソースコードで通ったのだろうか。
import java.util.*; public class BatchSystem{ public int[] schedule(int[] a,String[] b){ String [] c=new String[a.length]; int index=0; HashMap<String,Long> h=new HashMap<String,Long>(); for(int i=0;i<a.length;i++){ if(h.containsKey(b[i]))h.put(b[i],h.get(b[i])+(long)a[i]); else{ h.put(b[i],(long)a[i]); c[index++]=b[i]; } } int now=0; int ret[]=new int[a.length]; for(int i=0;i<index;i++){ long max=999999999999L; String maxval=""; int kesu=0; for(int j=0;j<index;j++){ if(max>h.get(c[j])){ max=h.get(c[j]); kesu=j; maxval=c[j]; } } h.put(maxval,9999999999999L); System.out.println(maxval); for(int j=0;j<a.length;j++){ if(maxval.equals(b[j]))ret[j]=now++; } } int honto[]=new int[a.length]; for(int i=0;i<a.length;i++){ honto[ret[i]]=i; } return honto; } }
結果:
234.63 + 0.00(STF) + 449.62 - 25.00 = 659.25
24位 1019 -> 1167
なぜかtozangezanになってしまったことは気にしない方針で。
次二完したらDiv1ですかね。