Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator