Educational Codeforces Round 174 (Rated for Div. 2)

  • 感觉是截至目前做得最惨的一场CF比赛……B题多测没清空、C题被Hack、D题读错题意后陷入深深的自我怀疑……

C. Beautiful Sequence

  • 原则上只要出现减法运算就要+mod %mod,因为模意义下无法判断究竟谁大谁小
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int power(int n,int p)
{
	if(p==0)
	{
		return 1;
	}
	long long tmp=power(n,p/2);
	if(p%2==1)
	{
		return tmp*tmp%mod*n%mod;
	}
	return tmp*tmp%mod;
}
int a[200005];
vector<int>c;
long long f[200005];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		int la=0,cnt=0,sum=0;
		c.clear();
		long long ans=0;
		for(int i=1;i<=n;i++)
		{
			f[i]=0;
			sum+=(a[i]==1);
			cnt+=(a[i]==2);
			if(a[i]==1)
			{
				c.push_back(cnt);
			}
			if(a[i]==3)
			{
				if(la)
				{
					f[i]=f[la]*power(2,cnt)%mod;
				}
				for(int j:c)
				{
					f[i]=(f[i]+power(2,cnt-j))%mod;
				}
				cnt=0;
				la=i;
				c.clear();
				ans=(ans+f[i]-sum)%mod;
			}
		}
		cout<<(ans+mod)%mod<<"\n";
	}
	return 0;
}

D. Palindrome Shuffle

  • 没注意到reorder是重排列而不是倒序,感觉也是情有可原,毕竟四个样例按倒序理解都是对的……赛场上你判断要用manacher算法的话不可能过这么多人,也是准确的,只是没想到最后竟然是在题意理解上出了问题……定个小目标:以后每场英文比赛后都要背5个英语单词
  • 首尾已经匹配好的子串不需要再动,剩余部分的两端至少要取一个
#include <bits/stdc++.h>
using namespace std;
int cnt[30];
int solve(string s)
{
	int n=s.size();
	int p=0;
	while(p<n-1-p&&s[p]==s[n-1-p])
	{
		p++;
	}
	auto check=[p,n,&s](int x)
	{
        memset(cnt,0,sizeof(cnt));
        if(x<n/2)
        {
            for(int i=p;i<=x;i++)
			{
				cnt[s[i]-'a']++;
			}
			for(int i=x+1;i<n/2;i++)
			{
				if(s[i]!=s[n-1-i])
				{
					return true;
				}
			}
			for(int i=n-1-x;i<=n-1-p;i++)
			{
				if(cnt[s[i]-'a']==0)
				{
					return true;
				}
	            else
	            {
	                cnt[s[i]-'a']--;
	            }
			}
			return false;
        }
		for(int i=p;i<=x;i++)
		{
			cnt[s[i]-'a']++;
		}
		for(int i=x+1;i<=n-p-1;i++)
		{
			if(cnt[s[i]-'a']==0)
			{
				return true;
			}
            else
            {
                cnt[s[i]-'a']--;
            }
		}
		for(int i=0;i<26;i++)
		{
			if(cnt[i]%2==1)
			{
				return true;
			}
		}
		return false;
	};
	return *ranges::partition_point(ranges::iota_view(p-1,n-p),check)-p+1;
}
int main()
{
	ios::sync_with_stdio(true);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		string s,t;
		cin>>s;
		t=s;
		reverse(t.begin(),t.end());
		cout<<min(solve(s),solve(t))<<"\n";
	}
	return 0;
}
posted @ 2025-02-20 17:49  D06  阅读(66)  评论(0)    收藏  举报
//雪花飘落效果