用差分可以做到n2,为什么题解全是n2logn的
查看原帖
用差分可以做到n2,为什么题解全是n2logn的
91374
小仓朝阳楼主2024/4/17 15:28

check可以用差分on解决,为什么要用到线段树或者树状数组,感觉有点误人子弟的感觉。

放个我的代码,具体自己看吧。

#include<bits/stdc++.h>
using namespace std;
int q[5005];
int vis[5005];
void solve() {
	int n;
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		char x;
		cin >> x;
		q[i] = x-'0';
	}
	for (int k = n; k >= 1; k--) {
		memset(vis, 0, sizeof(vis));
		int now = 0;
		int tag = 0;
		for (int i = 1; i <= n - k + 1; ++i) {
			now = (now + vis[i]) % 2;
			int kk = (now + q[i]) % 2;
			if (kk == 0) {
				now += 1;
				vis[i + k] += 1;
			}
		}

		for (int i = n - k + 2; i <= n; ++i) {
			now = (now + vis[i]) % 2;
			int kk = (now + q[i]) % 2;
			if (kk == 0) {
				tag = 1;
				break;
			}

		}
		if (tag == 0) {
			cout << k << endl;
			return;
		}
		
	}

}
int main(){
	int T;
	cin >> T;
	while (T--) {
		solve();
	}
}
2024/4/17 15:28
加载中...