请教测评机相关内容,为什么是WA不是RE

P1725 琪露诺

因为下标越界是未定义行为,程序可以做出任何行为
by immix @ 2023-12-23 14:09:01


@[KouMoSir](/user/1019606) 有时候如果你数组开的大小只比使用的大小小一点点,就可能WA或者TLE,差很多就会RE,还要注意,可能一个数组开小了,但是按照地址的计算,用到了其他数组
by emo_male_god @ 2023-12-23 14:09:58


因为数组是申请了一块连续的内存,越界的时候访问的是未定义的内存块。然后系统会认为这是和数组一样类型的东西,把它解释成了奇奇怪怪的值,就wa了
by HxDlBbCo877 @ 2024-01-17 20:53:03


看完题解用java写了一遍PriorityQueue解法: ```java import java.io.*; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { static final int[] f = new int[200010]; static final int[] a = new int[200010]; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int l = Integer.parseInt(st.nextToken()); int r = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); for (int i = 1; i <= n + 1; i++) { a[i] = Integer.parseInt(st.nextToken()); } int ans = 0; PriorityQueue<Integer> q1 = new PriorityQueue<>((A, B) -> (B - A)); PriorityQueue<Integer> q2 = new PriorityQueue<>((A, B) -> (B - A)); for (int i = 1; i <= l; i++) { q2.add(a[i]); } for (int i = l; i <= n; i++) { q1.add(f[i - l]); if (i - r - 1 >= l) { q2.add(f[i - r - 1]); } while (!q2.isEmpty() && q1.peek().equals(q2.peek())) { q1.poll(); q2.poll(); } f[i] = q1.peek() + a[i]; } for (int i = n - r + 1; i <= n; i++) { ans = Math.max(ans, f[i]); } System.out.println(ans); } } ``` 然后90分。。case #1,#2 (subtask)和#5没过,难道是同样的问题?
by LLLgoyour @ 2024-01-29 08:22:51


|