SRM 503(12/19 1:00~3:00)
■FoxMakingDice(Div1 Easy)
Toastmanは,パンを何枚か焼きたい.パンには幾つかの種類があり,ある種類のパンは,X分未満焼くとunder toasted,X分超過焼くとover toastedとなる.Toastmanは,パンを焼いたが,mi分焼いてunder toastedだったもの,また,ni分焼いてover toastedだったものが出来た.Toastmanは何種類のパンを用いたかを覚えていないが,ある種類のパンを焼いたときにunder toasted・over toastedだったものがそれぞれ少なくとも1枚以上はあったという.
パンの種類の最小数を答えよ.
under toastedだったものをU,over toastedだったものをOとし,それらを焼かれた時間の数直線にプロットする.例えば下図.
UOUOOUOUOUOUO
・パンの種類が1つで良い場合.
UUUUU | OOOOOO上のような場合.Xは,"|"で表される.
・パンが何種類あっても不可能な場合.
O…………または,
…………U
の場合.
・パンの種類が2つで良い場合.
上記のどれにも当てはまらない場合.何故なら,必ずパンの順列は,
U[…………]O
となり,
U | […………]O
で分けると,
[…………]内のOは全て排除され.
[U……U]O
となる.その後,
[U……U] | O
で分ければ終了する.
import java.util.*; import java.lang.*; import java.math.*; import java.io.*; public class ToastXToast { int INF=1<<28; double EPS=1e-9; public int bake(int[] a, int[] b) { Arrays.sort(a); // o Arrays.sort(b); // x boolean f=true; for(int j=0;j<b.length;j++){ for(int i=0;i<a.length;i++){ f&=a[i]<b[j]; } } if(f){ return 1; } else if(a[0]>b[0]||a[a.length-1]>b[b.length-1]){ return -1; } else if(a.length>=2&&b.length>=2){ return 2; } else{ return -1; } } void debug(Object...os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args) { ToastXToast temp = new ToastXToast(); } }
■Result
○×× 0 0144.26pt.
■Rating
1243 -> 1279若干上昇.少しずつRatingを上げていきたいものです….
0 件のコメント:
コメントを投稿