B. Binary Removals (思维)

题目

思路:想要出现否的情况那一定会有0在1的后面,而我们的删除操作只能隔着删,所以当出现两个00或两个11必然会留下一个,所以从后往前遍历,如果发现出现00之后又出现11则最终无论怎么删都会留下一个…1…0…的情况。

#include<iostream>
#include<cmath>
#include<map>
typedef long long ll;
using namespace std;
const int Max = 1e6 + 5;
ll ji[Max], o[Max], sum[Max];

int main()
{
   
	int t;cin >> t;
	while (t--)
	{
   
		string str;cin >> str;
		int f = 1;
		for (int i = str.size() - 2;i >= 0;i--)
		{
   
			if (f)
			{
   
				if (str[i] == '0' && str[i+1] == '0')f = 0;
			}
			else if (f == 0)
			{
   
				if (str[i] == '1' && str[i + 1] == '1')
				{
   
					cout << "NO" << endl;
					f = 999;
					break;
				}
			}
		}
		if(f!=999)cout << "YES" << endl;
	}
}
全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务