2011-02-03 60 views
-1

这里的问题陈述:CodeChef阵列变换计划

给定n个数字,你可以执行下列操作的任何数量的 时间:选择 号码,其中没有一个是0的任何子集。 递减通过 1子集中的号码,并增加数量并不 被K的子集可以 进行操作,从而使得除了其中一人所有 数字变成0? 输入:第一行包含 多的测试用例T. 2 * T线 后续,2对于每种情况。第一 线测试用例包含 数n和K.下一行 含有n个数,A_1 ... A_N。输出 :输出T行,每个测试用例对应 。对于测试用例,如果存在所述的 操作序列,则 输出“是”,否则输出“否” 。

Sample Input : 
3 
2 1 
10 10 
3 2 
1 2 2 
3 2 
1 2 3 

Sample Output : 
YES 
YES 
NO 

Constraints : 
1 <= T <= 1000 
2 <= n <= 100 
1 <= K <= 10 
0 <= a_i <= 1000 

&这里是我的代码:

import java.util.*; 

public class ArrayTransform { 
    public static void main(String args[]) { 
     Scanner sc = new Scanner(System.in); 
     int no_of_tests = sc.nextInt(); 

     int size; 
     int a[] = new int[100]; 
     boolean yes; 
     int j; 
     int k; 
     for (int i = 0; i < no_of_tests; i++) { 
      size = sc.nextInt(); 
      k = sc.nextInt(); 
      for (j = 0; j < size; j++) { 
       a[j] = sc.nextInt(); 
      } 
      yes = is_possible(a, size, k + 1); 
      if (yes) 
       System.out.println("YES\n"); 
      else 
       System.out.println("NO\n"); 
     } 
    } 

    static boolean is_possible(int a[], int size, int k_1) { 
     int count = 0; 
     int m[] = { -1, -1 }; 
     int mod; 
     for (int i = 0; i < size; i++) { 
      mod = a[i] % k_1; 
      if (m[0] != mod && m[1] != mod) { 
       if (m[0] == -1) 
        m[0] = mod; 
       else if (m[1] == -1) 
        m[1] = mod; 
       else 
        return false; 
      } 
     } 
     return true; 
    } 
} 
+3

哪来的问题??? – maaartinus 2011-02-03 13:30:40

回答

3
if (m[0] != mod && m[1] != mod) 

这里,而不是&&应该有||。只有m需要匹配mod。