第一题
package ccf202112; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class p1 { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String[] temp = bf.readLine().split(" "); int n = Integer.parseInt(temp[0]); int N = Integer.parseInt(temp[1]); int[] a = new int[n + 1]; temp = bf.readLine().split(" "); int sum = 0; int count = 0; for (int i = 1; i <= n; i++) { a[i] = Integer.parseInt(temp[i - 1]); sum += (a[i] - a[i - 1]) * count; count++; } sum += (N - a[n]) * count; System.out.println(sum); } }
第二题
package ccf202112; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class p2 { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String[] temp = bf.readLine().split(" "); int n = Integer.parseInt(temp[0]); int N = Integer.parseInt(temp[1]); long[] a = new long[n + 2]; int r = N / (n + 1); temp = bf.readLine().split(" "); for (int i = 1; i <= n; i++) { a[i] = Integer.parseInt(temp[i - 1]); } a[n + 1] = N; long res = 0; for (int i = 0; i <= n; i++) { long start; long end = a[i] - 1; while (end < a[i + 1] - 1) { start = end + 1;//代表f区间的左端点 long g = start / r; long f = i; end = Math.min((g + 1) * r - 1, a[i + 1] - 1);//g区间为[gr, (g + 1) * r - 1] res += Math.abs(((end - start) + 1) * (g - f)); } } System.out.println(res); } }