序列I WA60求调

3. 序列I

题目ID:11050必做题100分

最新提交:

Wrong Answer

60 分

历史最高:

Wrong Answer

60 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

给定一个序列 a=a[1],a[2],…,a[n]
有以下两种操作:
1.若a[i] = a[i+1],则可将a[i]与a[i+1]同时加1
2.将a[i]加2
求问是否可经过多次操作后使得所有a[i]相等。

输入格式

第一行,一个正整数T,代表数据组数。

接下来T*2行,每两行一个数据,其中第一行一个正整数n代表序列长度,第二行n个正整数。

输出格式

共T行,每行"YES"或者"NO"代表是否可行。

样例

Input 1

4 5 2 1 1 2 5 3 4 5 3 2 10 10 3 1 2 3

Output 1

YES
YES
YES
NO

Input 2

2 8 3 2 5 8 4 1 14 11 7 3 7 4 2 13 6 5

Output 2

YES
NO

样例解释

第一组:

在第一个数据中,可以在第2个元素和第3个元素上加一得到[2,2,2,2,5],然后在第1个元素和第2个元素三次加一,在第3个元素和第4个元素 三次加一得到 [5,5,5,5,5]。

在第二个数据中,可以在第3个元素加二得到 [4,5,5],然后在第2个元素和第3个元素加一得到 [4,6,6],最后在第1个元素加二得到[6,6,6]。 在第三个数据中,已经完成。

第二组:

[3 2 5 8 4 1 14 11] → [3 2 9 8 8 9 14 11] → [3 2 9 9 9 9 14 11] → [3 14 9 9 9 9 14 11] → [3 14 14 14 14 14 14 11] → [15 14 14 14 14 14 14 15] → [15 15 15 15 15 15 15 15]

数据范围

对于60%的数据 T = 1, 1 <= n <= 10
对于100%的数据 1 <= T <= 10, 1 <= n <= 200000

本帅哥的代码

#include <bits/stdc++.h>
using namespace std;

int main() {
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		stack <int> xl;
		for (int i = 1; i <= n; i++) {
			int chishi;
			cin >> chishi;
			if (xl.empty()) {
				xl.push(chishi);
			} else if (chishi == xl.top()) {
				xl.pop();
			} else {
				xl.push(chishi);
			}
		}
		if (xl.size() == 0 || xl.size() == 1) {
			cout << "YES\n"; 
		} else {
			cout << "NO\n";
		}
		
	}
	return 0;
} 

为什么是错的

为什么是错的

为什么是错的

为什么是错的

为什么是错的

为什么是错的

为什么是错的

为什么是错的

(帖子已被作者删除)

在后面加一句:

chishi %= 2;

就可以AC
求解决方案
@徐崇彦

@冯俊骁 我是杭行路小学的,刚才我的那个帖子没来得及讲

@费辰轶 我也是杭行路小学的!!!
505班!!!
(你应该认识我们班沈吴宸吧!)
你和我都是运河的
你上过信友队吗?
现在还在上吗?
哪个班?基础、普及,还是提高?
@费辰轶 @费辰轶 @费辰轶
没记错你是605班的对吗?

还有 @徐崇彦 ,催解决方案!
@徐崇彦 @徐崇彦 @徐崇彦