[容斥] Hihocoder Challenge 32 .B Rikka with String II
来源:互联网 发布:有没有5g网络 编辑:程序博客网 时间:2024/05/14 23:23
字典树实际上就是把前缀给缩起来
如果只有两个串,那么答案就是两个串的长度和减去LCP
这就是个容斥的形式,答案就是
前面的
LCP的话,枚举一下每一位,判断一下就可以了
hihocoder跑得好快啊,竟然没被卡常
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <vector>#include <ctime>#define pb push_backusing namespace std;const int N=25,P=998244353;int n,len[N],pw[25*50],pre[N][55],ipre[55];char a[N][N<<2];char *c[N];int t;int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); pw[0]=1; for(int i=1;i<=20*50;i++) pw[i]=2*pw[i-1]%P; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",a[i]+1),len[i]=strlen(a[i]+1); for(int j=len[i];j;j--) pre[i][j]=pre[i][j+1]+(a[i][j]=='?'); } int ans=1; for(int i=1;i<=n;i++) ans=1LL*ans*pw[pre[i][1]]%P; for(int S=1;S<(1<<n);S++){ int size=0; int mlen=1<<30; for(int i=1;i<=n;i++) if((S>>(i-1))&1) c[size++]=a[i],mlen=min(mlen,len[i]); int cur=0,p=0,prod=1; ipre[51]=0; for(int i=50;i;i--){ ipre[i]=ipre[i+1]; for(int j=0;j<size;j++) ipre[i]+=(c[j][i]=='?'); } for(int i=1;i<=mlen;i++,p++){ int cnt0=0,cnt1=0; for(int j=0;j<size;j++){ if(c[j][i]=='0') cnt0++; if(c[j][i]=='1') cnt1++; } if(cnt0 && cnt1) break; if(!cnt0 && !cnt1){ int pd=1LL*(pw[size]-2)*(i-1)%P; pd=1LL*pd*pw[ipre[i+1]]%P; cur=(cur+1LL*prod*pd)%P; prod=2*prod%P; continue; } int r=size-cnt0-cnt1,pd=1LL*(pw[r]-1)*(i-1)%P; //for(int j=0;j<size;j++) pd=1LL*pd*pw[pre[c[j]][i+1]]%P; pd=1LL*pd*pw[ipre[i+1]]%P; cur=(cur+1LL*prod*pd)%P; } int pd=pw[ipre[p+1]]; //for(int j=0;j<size;j++) pd=1LL*pd*pw[pre[c[j]][p+1]]%P; cur=(cur+1LL*prod*p%P*pd)%P; for(int i=1;i<=n;i++) if(!((S>>(i-1))&1)) cur=1LL*cur*pw[pre[i][1]]%P; if(size&1) ans=(ans+cur)%P; else ans=(ans-cur)%P; } printf("%d\n",(ans+P)%P); //printf("%d\n",clock()); return 0;}
阅读全文
0 0
- [容斥] Hihocoder Challenge 32 .B Rikka with String II
- [随机化 || 黄金分割] HihoCoder #1461 Challenge 26 Rikka with Number
- [点分治] HihoCoder #1462 Challenge 26 Rikka with Tree IV
- [费用流对偶LP 单纯形] HihoCoder #1464 Challenge 26 Rikka with Flow
- hihocoder #24 Rikka with Subsequence
- hihoCoder挑战赛17 B String Problem II hihoCoder 1261
- Rikka with Parenthesis II
- Rikka with Parenthesis II
- Rikka with Sequence II
- bestcoder Rikka with string
- Rikka with string
- HDU5202 Rikka with string
- hdu5202 Rikka with string
- Rikka with String HDU
- hihoCoder挑战赛19 A Rikka with Sequence
- hihocoder 1455 : Rikka with Tree III
- HDU5831 Rikka with Parenthesis II
- HDU5831 Rikka with Parenthesis II
- struts2 <s:iterator> status属性
- 【Maven实战】之搭建Maven私服和镜像
- ftp简单使用命令
- AngularJS框架
- 数据结构之排序4--选择排序
- [容斥] Hihocoder Challenge 32 .B Rikka with String II
- JUnit学习笔记1
- Java使用JNI调用C/C++方法
- 【转】Python与ArcGIS Engine的集成
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- BZOJ3668(Noi2014)[起床困难综合症]--贪心。
- Myeclipse中Action基本配置 There is no Action mapped for namespace [/] and action name [stu] associated 问题
- 操作系统基础
- JAVA初学 面向对象