| 模型 | 模型答案 | 正确答案 |
|---|---|---|
| 金声玉亮2.0 | ```python import sys input = sys.stdin.read data = input().split() N = int(data[0]) A = list(map(int, data[1:])) def max_pyramid_size(A): left = [0] * (N + 1) right = [0] * (N + 1) for i in range(N): left[i + 1] = max(left[i], A[i]) for i in range(N - 1, -1, -1): right[i] = max(right[i + 1], A[i]) max_size = 0 for i in range(N): if left[i] <= right[i + 1]: max_size = max(max_size, min(left[i], right[i + 1])) return max_size print(max_pyramid_size(A)) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| deepseek-r1 | ```python n = int(input()) A = list(map(int, input().split())) if n == 0: print(0) exit() left = [0] * n left[0] = min(1, A[0]) for i in range(1, n): left[i] = min(left[i-1] + 1, A[i]) right = [0] * n right[-1] = min(1, A[-1]) for i in range(n-2, -1, -1): right[i] = min(right[i+1] + 1, A[i]) max_k = 0 for m in range(n): if m + 1 < n: current_right = right[m+1] else: current_right = 0 current_k = min(left[m], current_right + 1) if current_k > max_k: max_k = current_k print(max_k) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| gpto1 | ```python # YOUR CODE HERE import sys import threading def main(): import sys import math import bisect sys.setrecursionlimit(1 << 25) N_and_rest = sys.stdin.read().split() N = int(N_and_rest[0]) A = list(map(int, N_and_rest[1:N+1])) N = len(A) answer = 1 # At least k=1 can be achieved left = 1 right = (N + 1) // 2 while left <= right: mid = (left + right) // 2 k = mid L = 2 * k - 1 if L > N: right = mid - 1 continue S = [] for i in range(k - 1): S.append(i + 1) S.append(k) for i in range(k - 1): S.append(k - i - 1) # Pad S to length N with zeros S += [0] * (N - L) D = [A[i] - S[i] for i in range(N)] # Sliding window minimum of size L from collections import deque min_queue = deque() found = False for i in range(N): while min_queue and min_queue[-1] > D[i]: min_queue.pop() min_queue.append(D[i]) if i >= L: if min_queue[0] == D[i - L]: min_queue.popleft() if i >= L - 1: if min_queue[0] >= 0: found = True break if found: answer = k left = mid + 1 else: right = mid - 1 print(answer) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| gpt-4o-2024-08-06 | ```python # YOUR CODE HERE def max_pyramid_sequence_size(N, A): # The maximum size of the pyramid sequence we can form is determined by the # maximum k such that we can form a sequence 1, 2, ..., k, ..., 2, 1. # This means we need to find the maximum k such that: # 1 <= 1, 2 <= 2, ..., k <= k, ..., 2 <= 2, 1 <= 1 # This is equivalent to finding the maximum k such that: # A[i] >= i for i in 1 to k and A[N-i+1] >= i for i in 1 to k # We will use a binary search to find the maximum k. def can_form_pyramid(k): # Check if we can form a pyramid of size k for i in range(1, k + 1): if A[i - 1] < i or A[N - i] < i: return False return True # Binary search for the maximum k left, right = 1, (N + 1) // 2 while left < right: mid = (left + right + 1) // 2 if can_form_pyramid(mid): left = mid else: right = mid - 1 return left import sys input = sys.stdin.read data = input().split() N = int(data[0]) A = list(map(int, data[1:])) print(max_pyramid_sequence_size(N, A)) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| DeepSeek-Coder-V2-Lite-Instruct | ```python # YOUR CODE HERE def find_max_pyramid_sequence(N, A): max_size = 0 for start in range(N): for end in range(start, N): B = A[:] while start < end: if B[start] > B[start + 1]: B[start] -= 1 if B[end] > B[end - 1]: B[end] -= 1 start += 1 end -= 1 max_size = max(max_size, end - start + 1) return max_size # Read input import sys input = sys.stdin.read data = input().split() N = int(data[0]) A = list(map(int, data[1:])) # Solve the problem max_size = find_max_pyramid_sequence(N, A) # Output the result print(max_size) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| Meta-Llama-3.1-405B-Instruct-Turbo | ```python import sys def solve(): n = int(input()) a = list(map(int, input().split())) def check(k): b = a[:] i, j = 0, n - 1 for x in range(1, k): if i >= j: return False if b[i] < x: return False if b[j] < x: return False b[i] -= x b[j] -= x i += 1 j -= 1 return True l, r = 1, n + 1 while l < r: mid = (l + r + 1) // 2 if check(mid): l = mid else: r = mid - 1 print(l) if __name__ == "__main__": solve() ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| Meta-Llama-3.1-70B-Instruct-Turbo | ```python import sys def solve(): n = int(input()) a = list(map(int, input().split())) def check(k): i, j = 0, n - 1 while i < j: if a[i] < k - i or a[j] < k - i: return False if a[i] == k - i: i += 1 elif a[j] == k - i: j -= 1 else: return False return True lo, hi = 1, n + 1 while lo < hi: mid = (lo + hi) // 2 if check(mid): lo = mid + 1 else: hi = mid print(lo - 1) if __name__ == "__main__": solve() ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| Qwen2-72B-Instruct | ```python from itertools import accumulate N = int(input()) A = list(map(int, input().split())) def pyramid_size(A): # Calculate the maximum pyramid size from the left and right left = [0] * N right = [0] * N stack = [] for i, a in enumerate(A): while stack and A[stack[-1]] >= a: stack.pop() left[i] = stack[-1] if stack else -1 stack.append(i) stack = [] for i in range(N-1, -1, -1): while stack and A[stack[-1]] >= A[i]: stack.pop() right[i] = stack[-1] if stack else N stack.append(i) # Calculate the maximum pyramid size for each element pyramid = [min(i - left[i], right[i] - i) for i in range(N)] for i in range(1, N): pyramid[i] = max(pyramid[i], pyramid[i-1] - 1) for i in range(N-2, -1, -1): pyramid[i] = max(pyramid[i], pyramid[i+1] - 1) return pyramid pyramid_left = pyramid_size(A) pyramid_right = pyramid_size(A[::-1])[::-1] # Calculate the maximum pyramid size by combining the left and right pyramid sizes max_pyramid_size = max(pyramid_left[i] + pyramid_right[i] - 1 for i in range(N)) print(max_pyramid_size) ``` ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| baichuan4 | ```python # YOUR CODE HERE import sys def max_pyramid_sequence_size(n, sequence): max_size = 0 for i in range(n): # Calculate the maximum size of the Pyramid Sequence starting from index i size = 1 left = sequence[i] right = sequence[i] j = i + 1 k = i - 1 while j < n and left >= sequence[j]: left -= 1 size += 1 j += 1 while k >= 0 and right >= sequence[k]: right -= 1 size += 1 k -= 1 max_size = max(max_size, size) return max_size # Read input from stdin input_data = sys.stdin.read().splitlines() n = int(input_data[0]) sequence = list(map(int, input_data[1].split())) # Calculate the maximum size of the Pyramid Sequence result = max_pyramid_sequence_size(n, sequence) # Write the result to stdout print(result) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| doubao | ```python import bisect def find_max_pyramid_size(a): n = len(a) dp = [0] * (n + 1) for i in range(n): for j in range(i + 1): k = i - j if a[j] > k: continue dp[i + 1] = max(dp[i + 1], dp[j] + min(a[j], k - a[j]) + 1) return dp[n] n = int(input()) a = list(map(int, input().split())) print(find_max_pyramid_size(a)) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| gpto1 | ```python # YOUR CODE HERE import sys import threading def main(): import sys import math import bisect sys.setrecursionlimit(1 << 25) N_and_rest = sys.stdin.read().split() N = int(N_and_rest[0]) A = list(map(int, N_and_rest[1:N+1])) N = len(A) answer = 1 # At least k=1 can be achieved left = 1 right = (N + 1) // 2 while left <= right: mid = (left + right) // 2 k = mid L = 2 * k - 1 if L > N: right = mid - 1 continue S = [] for i in range(k - 1): S.append(i + 1) S.append(k) for i in range(k - 1): S.append(k - i - 1) # Pad S to length N with zeros S += [0] * (N - L) D = [A[i] - S[i] for i in range(N)] # Sliding window minimum of size L from collections import deque min_queue = deque() found = False for i in range(N): while min_queue and min_queue[-1] > D[i]: min_queue.pop() min_queue.append(D[i]) if i >= L: if min_queue[0] == D[i - L]: min_queue.popleft() if i >= L - 1: if min_queue[0] >= 0: found = True break if found: answer = k left = mid + 1 else: right = mid - 1 print(answer) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| kimi | ```python # YOUR CODE HERE def check(k, A): l = 0 r = len(A) - 1 cnt = 0 while l < r: if cnt < k: if A[l] - A[r] >= k - cnt: A[l] -= k - cnt elif A[r] - A[l] >= k - cnt: A[r] -= k - cnt else: return False cnt += 1 l += 1 r -= 1 if cnt < k and A[l] >= k - cnt: return True return cnt == k def binary_search(A): left, right = 1, len(A) // 2 + 1 while left < right: mid = (left + right) // 2 if check(mid, A[:]): left = mid + 1 else: right = mid return left - 1 def main(): N = int(input()) A = list(map(int, input().split())) print(binary_search(A)) def __starting_point(): main() __starting_point() ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| minimax | ```python # YOUR CODE HERE from collections import deque def max_pyramid_size(N, A): # Initialize a deque for efficient popping from both ends sequence = deque(A) # Counters for the pyramid size and the current level pyramid_size, level = 0, 0 # The maximum value in the sequence max_value = max(A) while sequence: # The number of elements needed for the current level level_elements = 2 * level + 1 # Check if we have enough elements to form the current level if len(sequence) < level_elements: break # Check if the current level can be formed with the available elements if all(x >= level for x in sequence): # Increase the pyramid size and move to the next level pyramid_size += 1 level += 1 else: # If the current level cannot be formed, remove the smallest element sequence.remove(min(sequence)) return pyramid_size # Read the inputs from stdin N = int(input()) A = list(map(int, input().split())) # Solve the problem and write the answer to stdout print(max_pyramid_size |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| wenxinyiyan | ```python # Read the input N = int(input()) A = list(map(int, input().split())) # Initialize variables max_size = 0 left = 0 right = 0 current_max = 0 # Loop through the array to find the maximum pyramid size while right < N: # Increase the right pointer and update the current maximum value current_max = max(current_max, A[right]) # If the current maximum value is greater than or equal to the difference between the right and left pointers plus 1, # we can potentially form a pyramid sequence while current_max >= right - left + 1: # Update the maximum pyramid size max_size = max(max_size, 2 * (right - left) + 1) # Move the left pointer and update the current maximum value current_max = max(A[left+1:right+1]) left += 1 # Move the right pointer right += 1 # Print the maximum pyramid size print(max_size) ``` **Note**: The provided solution has a time complexity of O(N), where N is the length of the input sequence. It uses a sliding window approach to find the maximum pyramid size by maintaining two pointers (`left` and `right`) and a current maximum value (`current_max`) within the window. The solution repeatedly moves the right pointer, updates the current maximum value, and then moves the left pointer as long as a potential pyramid sequence can be formed. Finally, it prints the maximum pyramid size found during the process. |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| zhipu | ```python def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) A = list(map(int, data[1:])) # This will hold the maximum size of the pyramid sequence we can find max_pyramid_size = 0 # We use two pointers to try to form the largest possible pyramid sequence left = 0 right = N - 1 # We will attempt to build the pyramid from the outside in while left <= right: # Current potential height of the pyramid current_height = min(A[left], A[right]) # Check if we can form a valid pyramid with the current height if left == right or A[left] == A[right]: # Update the maximum size found so far max_pyramid_size = max(max_pyramid_size, current_height) # Move both pointers towards the center left += 1 right -= 1 else: # If the values at the pointers do not match, we need to adjust them if A[left] < A[right]: right -= 1 else: left += 1 print(max_pyramid_size) if __name__ == "__main__": main() ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |
| deepseek-v3 | ```python # YOUR CODE HERE def max_pyramid_size(N, A): left = 1 right = N result = 1 while left <= right: mid = (left + right) // 2 possible = True current = 1 for i in range(N): if A[i] >= current: current += 1 else: current = A[i] + 1 if current > mid: break if current > mid: possible = False else: current = mid for i in range(N-1, -1, -1): if A[i] >= current: current -= 1 else: current = A[i] - 1 if current < 1: break if current >= 1: possible = True else: possible = False if possible: result = mid left = mid + 1 else: right = mid - 1 return result # Read input N = int(input()) A = list(map(int, input().split())) # Compute and print the result print(max_pyramid_size(N, A)) ``` |
[{"input": "5\n2 2 3 1 1\n", "output": "2\n", "testtype": "stdin"}, {"input": "5\n1 2 3 4 5\n", "output": "3\n", "testtype": "stdin"}, {"input": "1\n1000000000\n", "output": "1\n", "testtype": "stdin"}] |