为什么luogu上48, oitiku和NOIP官方测爆0了啊,求大佬看看
查看原帖
为什么luogu上48, oitiku和NOIP官方测爆0了啊,求大佬看看
342584
流夏的美楼主2020/12/8 21:20

rt 心态真的有点崩。。。

#include <stdio.h>
#include <iostream>
#include <memory.h>
#define int long long
using namespace std;

int ask, all, ans, l;
int t[305], f[305];
string c, a, b;

void jishu(string tt) {
	int al = 0;
	int ll = tt.length();
	for(int i = 0; i < ll - 1; ++i) {
		if(f[tt[i]] % 2 == 0)
			++al;
		else 
			--al;
		if(al <= all) ++ans;
		f[tt[i]] += 1;
	}
	memset(f, 0, sizeof f);
}

void chuli(int r) {
	bool bj = false;
	for(int i = 1; i < r; ++i) {
		a.clear();
		if(r % (i + 1) == 0) {
			for(int k = 0; k <= i; ++k)
				a += c[k];
			for(int k = i + 1; k < r; k += i + 1) {
				for(int q = k; q <= k + i; ++q)
					b += c[q];
				if(a != b)
					bj = true;
				b.clear();
			}
			if(!bj) {
//				cout << a << endl;
				jishu(a);	
			}
			bj = false;
		}
	}
}

signed main() {
	freopen("string.in", "r", stdin);
	freopen("srtring.out", "w", stdout);
	scanf("%lld", &ask);
	for(int i = 1; i <= ask; ++i) {
		cin >> c;
		l = c.length();
		for(int j = l - 1; j >= 0; --j) {
			if(t[c[j]] % 2 == 0)
				++all;
			else 
				--all;
			t[c[j]] += 1;
			chuli(j);
		}
		printf("%lld\n", ans);
		memset(t, 0, sizeof t);
		all = 0;
		ans = 0;
		c.clear();
	}
	return 0;
}
2020/12/8 21:20
加载中...