找出糖果中数量最大的一种,设其数量为max,然后让其他的所有来往中间插,只有当剩余的糖果数大于等于max-1时才能满足要求
糖果 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 topcoder工作室的PIAOYIi超级爱吃糖果,现在他拥有一大堆不同种类的糖果,他准备一口气把它们吃完,可是他有一个习惯,他不喜欢同一种类的糖果连着吃,他喜欢先吃一种,然后再吃另一种。可是PIAOYI不知道是否存在一种顺序能把这些糖果吃完,聪明的你可以帮助他吗? 输入 第一行有一个整数N,接下来有N组数据,第一行有一个整数M(0<M<1000000),第二行是M个数,表示M种糖果的数目Mi(0<Mi<1000000). 输出 对于每组数据,输出一行,包含一个“Yes”或者“No”。 样例输入 2 3 1 1 5 5 1 2 3 4 5
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int cases=scanner.nextInt(); while(cases--!=0) { int number=scanner.nextInt(); int result[]=new int[number]; int sum=0,max=0; for(int i=0;i<number;i++) { result[i]=scanner.nextInt(); sum+=result[i]; if(max<result[i]) max=result[i]; } if(max-1>sum-max) System.out.println("No"); else { System.out.println("Yes"); } /*Arrays.sort(result); int sum=0; for(int j=0;j<number-1;j++) { sum+=result[j]; } if(result[number-1]-1>sum) System.out.println("No"); else { System.out.println("Yes"); }*/ } } }
另外一种写法
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int cases=scanner.nextInt(); while(cases--!=0) { int number=scanner.nextInt(); int result[]=new int[number]; for(int i=0;i<number;i++) { result[i]=scanner.nextInt(); } Arrays.sort(result); int sum=0; for(int j=0;j<number-1;j++) { sum+=result[j]; } if(result[number-1]-1>sum) System.out.println("No"); else { System.out.println("Yes"); } } } }