第一题找是K的倍数的最长子序列
sum[i]记录序列从0到i的和
问题转化为sum[]数组中两个元素差是k的倍数,两元素下标的最大差值
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] p = new int[n];
int[] sum = new int[n + 1];
sum[0] = 0;
for (int i = 0; i < n; i++) {
p[i] = sc.nextInt();
sum[i + 1] = sum[i] + p[i];
}
int k = sc.nextInt();
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = n; j > i; j--) {
if (getLength(sum, i, j, k) > res) {
res = getLength(sum, i, j, k);
break;
}
}
if (res >= n - i) {
break;
}
}
System.out.println(res);
}
sc.close();
}
static int getLength(int[] sum, int begin, int end, int k) {
int res = 0;
if ((sum[end] - sum[begin]) % k == 0) {
res = end - begin;
}
return res;
}
第二题改卷子
只要最大数小于等于和的二分之一就行
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int[] s = new int[n];
int sum = 0;
for (int i = 0; i < n; i++) {
s[i] = sc.nextInt();
sum += s[i];
}
Arrays.sort(s);
if (sum >= 2 * s[n - 1]) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
sc.close();
}
PS:前面的选择题有点炸