| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
确实是胡说,一个暴力都过的题,弄成什么好几种方法都不行的~~~In Reply To:1006题系统会误判,不管你做对做不对,新手就不要在这个题上折磨自己了。PASS!! Posted by:kickflip at 2008-05-15 11:08:15 > 1006我提交了将近15次(分三天)
>
> 用了好几种方法,都不行
>
> 包括测试数据
>
> 24 29 34 0 1
> 24 29 34 1 21252
> 47 57 67 0 1
> 47 57 67 1 21252
> 提交后也不成功
>
>
> 贴出其中两种(第二种是从牛人那借鉴过来的),供大家指正。
>
> 经过本人鉴定,ACM系统的1006题,系统的判定有误。鉴定完毕
>
> 附,解决方法1
> package java_1006;
>
> import java.util.Scanner;
>
> public class Main {
> public static void main(String args[]) {
> Scanner in=new Scanner(System.in);
> final int P=23;
> final int E=28;
> final int I=33;
> int number=1;
>
> int pp,ee,ii,dd;
> while((pp=in.nextInt())>-1
> &&((ee=in.nextInt())>-1)
> &&((ii=in.nextInt())>-1)
> &&((dd=in.nextInt())>-1)){
>
> Seed[] sd=new Seed[21253];
> int i,j;
> for(i=pp;i<sd.length;i+=P){
> sd[i]=new Seed();
> sd[i].setNn1(true);
> }
>
> for(j=pp-P;j>=0;j-=P){
> sd[j]=new Seed();
> sd[j].setNn1(true);
> }
>
> for(i=ee;i<sd.length;i+=E){
> if(sd[i]==null){
> sd[i]=new Seed();
> }
> sd[i].setMm2(true);
> }
>
> for(j=ee-E;j>=0;j-=E){
> if(sd[j]==null){
> sd[j]=new Seed();
> }
> sd[j].setMm2(true);
> }
>
> for(i=ii;i<sd.length;i+=I){
> if(sd[i]==null){
> sd[i]=new Seed();
> }
> sd[i].setKk3(true);
> }
>
> for(j=ii-I;j>=0;j-=I){
> if(sd[j]==null){
> sd[j]=new Seed();
> }
> sd[j].setKk3(true);
> }
>
> int k = dd + 1;
> while (k < 21253) {
> if (sd[k] == null) {
>
> } else {
> if (sd[k].peak()) {
> break;
> }
> }
> k++;
> }
>
> System.out.println("Case " + number++
> + ": the next triple peak occurs in "
> + (k-dd) + " days.");
>
> /*int dd1,dd2,dd3;
> dd1=dd2=dd3=dd;
> while(dd1<pp&&dd2<ee&&dd3<ii){
>
> }*/
>
> }
> }
> }
>
> class Seed{
> boolean nn1=false;//P
> boolean mm2=false;//E
> boolean kk3=false;//I
> public boolean isKk3() {
> return kk3;
> }
> public void setKk3(boolean kk3) {
> this.kk3 = kk3;
> }
> public boolean isMm2() {
> return mm2;
> }
> public void setMm2(boolean mm2) {
> this.mm2 = mm2;
> }
> public boolean isNn1() {
> return nn1;
> }
> public void setNn1(boolean nn1) {
> this.nn1 = nn1;
> }
>
> public boolean peak(){
> return nn1==true&&mm2==true&&kk3==true;
> }
> }
>
>
> 解决方法2
>
> package java_1006;
>
> import java.util.Scanner;
>
> public class Main {
>
> public static void main(String args[]) {
> int j, p, e, i, d = 0, days[][][] = new int[23][28][33];
> p = e = i = 0;
> for (j = 0; j < 21252; j++) {
> days[p][e][i] = j;
> p = p == 22 ? 0 : p + 1;
> e = e == 27 ? 0 : e + 1;
> i = i == 32 ? 0 : i + 1;
> }
>
> Scanner in = new Scanner(System.in);
>
> p = in.nextInt();
> e = in.nextInt();
> i = in.nextInt();
> d = in.nextInt();
>
> for (j = 0; p >= 0 && e >= 0 && i >= 0 && d >= 0; j++) {
> p %= 23;
> e %= 28;
> i %= 33;
> System.out.println("Case " + (j + 1)
> + " the next triple peak occurs in "
> + ((days[p][e][i] - d + 21251) % 21252 + 1) + " days.");
> p = in.nextInt();
> e = in.nextInt();
> i = in.nextInt();
> d = in.nextInt();
> }
> }
>
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator