90pts,求调!!
查看原帖
90pts,求调!!
1001535
封禁用户楼主2024/8/24 09:42
#include <bits/stdc++.h>
using namespace std;
int t;
int n, m;
char s[1000001];
int ans;
int sum;
bool f;
int g;
int hh;
bool j;
int io;
int fh;
bool p;
int lk;
int main() {
	cin >> t;
	while (t--) {
		sum = 0;
		j = 0;
		g = 0;
		io = 0;
		f = 0;
		hh = 0;
		lk = 0;
		p = 0;
		ans = 0;
		fh = 0;
		cin >> n >> m;
		for(int i = 0; i < m; i++) cin >> s[i];
		for (int i = 0 ; i < m; i++) {
			if (s[i] == '1') hh++;
		}
		for (int i = 0 ; i < m; i++) {
			if (s[i] == '0') lk++;
		}
		for (int i = 0; i < m; i++) {
			if (s[i] == '0') ans++;
			if (s[i] == '1')  {
				p = 1;
				g++;
				if(g == 1) sum = ans;
				if(g == 2) io = ans;
				fh = ans;
				/*-----------------------*/
				if(g == 1)
				{
					if(ans > n) {
						f = 1;
						cout << "No\n";
						break;
					}
				}
				/*----------------------*/
				
//		  cout << "fh=" << fh << " " << "sum=" << sum << endl;
//				cout << "g=" << g << endl;
//				cout << "(m - i - 1)=" << (m - i - 1) << endl;
//  				if(g == hh)
//  				{
//  //					cout << "fh=" << fh << endl;
//  				    if(fh < (m - i - 1)) {
//  				        f = 1;
//  				        cout << "No\n";
//  				        break;
//  				    }
//  				}
// 			/*---------------------------------------*/
				if(hh == 1)
				{
					if(ans > n) {
						f = 1;
						cout << "No\n";
						break;
					}
				}
	/*---------------------------------------*/
	
	/*---------------------------------------*/
				if (hh == 2) {
					if (g == 1) sum = ans ,fh = sum;
					if(fh != ans) 
					{
						cout << "No\n";
						f = 1;
						break;
					}
					if (ans > n || ans < sum) {
						cout << "No\n";
						f = 1;
//						ans = 0;
						break;
					}
					if ((ans > n || ans < sum)  && g == 2) {
						cout << "No\n";
						f = 1;
//						ans = 0;
						break;
					}
					ans = 0;
					continue;
				}
/*---------------------------------------*/

/*---------------------------------------*/
				if (sum != ans && g >= 3) {
					f = 1;
					cout << "No\n";
					break;
				} else sum = ans;
				if(g == 1 && sum > n) 
				{
				    cout << "No\n";
				    f = 1;
				    break;
				}
				
				/*---------------------------------------*/
				
				/*---------------------------------------*/
				if(g == 2)
				{
					if(sum != ans) 
					{
						if(ans > n) {
						cout << "No\n";
						f = 1;
						break;
						}
					}
				}
				/*---------------------------------------*/
				
				/*---------------------------------------*/
				if (lk > 0 && ans == 0 && g >= 2) {
					f = 1;
					cout << "No\n";
					break;
				}
				/*---------------------------------------*/
				
				/*---------------------------------------*/
				if (ans > n || ans != sum && g >= 2) {
					f = 1;
					cout << "No\n";
					break;
				}
				/*---------------------------------------*/
			  ans = 0;
			}
		}
		if (f == 1) continue;
//		cout << "ans=" << ans << " " << "fh=" << fh << endl;
		if (ans > n) {
			cout << "No\n";
			continue;
		}
// 	/*-------------------------*/
		cout << "Yes\n";
	}
	return 0;
}
/*
4
5 5 00001
5 4 1010
10 12 000100110000
6 9 100000100
 
11111111
*/
2024/8/24 09:42
加载中...