社区讨论

18pts求条

P3501[POI 2010] ANT-Antisymmetry参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjfaf6rs
此快照首次捕获于
2025/12/21 13:29
3 个月前
此快照最后确认于
2025/12/21 13:35
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int len,ans,f[5000010];
string st,st1;
int main()
{
	cin>>len>>st;
	string st1="&#";
	for(int i=0;i<len;i++)
	{
		st1+=st[i];
		st1+='#';
	}
	st1+=')';
	len=st1.size();
	st=st1;
	for(int i=3,r=0,mid=0;i<len;i++)
	{
		if(st[i]!='#')
		{
			continue;
		}
		if(i<=r)
		{
			f[i]=min(f[mid*2-i],r-i+1);
		}
		while((st[i+f[i]]=='#'&&st[i-f[i]]=='#')||(st[i+f[i]]=='0'&&st[i-f[i]]=='1')||(st[i+f[i]]=='1'&&st[i-f[i]]=='0'))
		{
			f[i]++;
		}
		if(i+f[i]>r)
		{
			r=i+f[i];
			mid=i;
		}
		ans+=(f[i]-1)/2;
	}
	cout<<ans;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...