noip t2 luogu48 oitiku爆0求助
  • 板块灌水区
  • 楼主ICareNothing
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/12/10 18:54
  • 上次更新2023/11/5 06:19:08
查看原帖
noip t2 luogu48 oitiku爆0求助
262389
ICareNothing楼主2020/12/10 18:54
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) 
{
	freopen("string.in","r",stdin);
	freopen("string.out","w",stdout);
	int t;
	cin>>t;
	for (int i=0;i<t;i++)
	{
		string s;
		cin>>s;
		if (s.length()<=1000)
		{
		long long ans=0;
		int lis[3][26];
		for (int j=0;j<26;j++)
		{
			lis[0][j]=0;
			lis[1][j]=0;
			lis[2][j]=0;
		}
		for (int j=0;j<s.length();j++)
			lis[0][s[j]-'a']+=1;
		for (int j=0;j<s.length()-2;j++)
		{
			memset(lis[1],0,sizeof(lis[1]));
			char a[j+1];
			for (int k=0;k<=j;k++)
			{
				a[k]=s[k];
				lis[1][a[k]-'a']+=1;
			}
			for (int k=j+1;k<s.length()-1;k++)
			{
				memset(lis[2],0,sizeof(lis[2]));
				char b[k-j];
				for (int m=0;m<=k-j-1;m++)
				{
					b[m]=s[j+m+1];
					lis[2][b[m]-'a']+=1;
				}
				//cout<<lis[0][13]<<" "<<lis[1][13]<<" "<<lis[2][13]<<"\n";
			//	cout<<"thd";
			int na1=0,nc1=0;
			for (int q=0;q<26;q++)
			{
				if (lis[1][q]%2==1)
					na1+=1;
				if ((lis[0][q]-lis[1][q]-lis[2][q])%2==1)
					nc1+=1;
			}
			if (na1<=nc1)
			{
				ans+=1;
				//cout<<j+1<<" "<<k+1<<" "<<m<<"\n";						
			}
				int n=(s.length()-1)/(k+1);
				for (int m=1;m<n;m++)
				{
					int flag=0;
					for (int p=0;p<=k;p++)
					{
						if (s[p]!=s[p+m*(k+1)])
						{
							flag=1;
							break;
						}
					}
						if (flag==1)
							break;
						int na=0,nc=0;
						for (int q=0;q<26;q++)
						{
							if (lis[1][q]%2==1)
								na+=1;
							if ((lis[0][q]-(m+1)*(lis[1][q]+lis[2][q]))%2==1)
								nc+=1;
						}
						if (na<=nc)
						{
							ans+=1;
							//cout<<j+1<<" "<<k+1<<" "<<m<<"\n";						
						}
				}
			}
		}
		cout<<ans<<"\n";
		}
		else
		{
			int ans=0;
			if (s.length()%2==1)
			{
				for (int i=2;i<=s.length()-3;i+=2)
					ans+=i;
				for (int i=1;i<=(s.length()-3)/2+1;i++)
					ans+=1;
			}
			if (s.length()%2==0)
			{
				for (int i=1;i<=s.length()-3;i+=2)
					ans+=i;
				for (int i=1;i<=(s.length()-4)/2+1;i++)
					ans+=1;
			}
			cout<<ans<<"\n";
		}
	}
	return 0;
}
2020/12/10 18:54
加载中...