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;
	}
}

猜你喜欢

转载自blog.csdn.net/asbbv/article/details/114994591