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 件のコメント:
コメントを投稿