正题
题解太巧妙了
我们把奇数位上的A换成B,B换成A。就变成了现在不能删除AA和BB,因为删除两位 剩下位的奇偶是不变的,所以就有唯一对应的A和B。
考虑一个性质,如果A的个数或者B的个数>,那么就无解,反之有解。
感觉挺显然的,考虑A的话,把B和C染黑就好了,反之亦然,发现异色才能抵消,那么>显然无解,否则肯定可以消除掉。
那么就可以直接补集转化了,枚举A或B的个数,直接算贡献就好了。
#include<bits/stdc++.h>
using namespace std;
const int N=10000010;
int n;
int fac[N],inv[N],ci[N];
const long long mod=998244353;
long long ksm(long long x,long long t){
long long tot=1;
while(t){
if(t&1) (tot*=x)%=mod;
(x*=x)%=mod;
t/=2;
}
return tot;
}
long long C(int x,int y){
return 1ll*fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main(){
scanf("%d",&n);
long long tot=0;
fac[0]=ci[0]=1;for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod,ci[i]=ci[i-1]*2%mod;
inv[n]=ksm(fac[n],mod-2);for(int i=n-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
for(int i=n/2+1;i<=n;i++) tot+=C(n,i)*ci[n-i]%mod;
printf("%lld\n",(ksm(3,n)-tot*2%mod+mod)%mod);
}
Portal 题解:奇偶位替换与组合计数
本文深入解析了一个名为Portal的编程挑战题解,通过奇数位与偶数位字符的替换策略,巧妙地解决了不能删除相同字符的问题。文章详细阐述了解题思路,即通过判断A和B的数量关系来确定解的存在性,并利用组合数学中的技巧计算可能的解的总数。最后,提供了完整的C++代码实现。
853

被折叠的 条评论
为什么被折叠?



