BUAA Summer Practice 2017 #1 字符串专场
https://vjudge.net/contest/262753#overview
C - Regular Number HDU - 5972
bitset temp, temp[i]=1表示 此前i个位置都能完全匹配,&=bt[x-'0']来递推
int n,a[1111][12];
char s[5000050];
int main()
{
while(~scanf("%d",&n))
{
bitset<1000> bt[11];
re(i,0,9)bt[i].reset();
re(i,1,n)
{
int x;inin(x);
re(j,1,x)
{
int y;inin(y);
bt[y][i-1]=1;
}
}
strin(s+1);
int len=strlen(s+1);
while(s[len]<'0'||s[len]>'9')len--;
bitset<1000> temp;
temp.reset();
re(i,1,len)
{
temp<<=1;
temp[0]=1;
temp&=bt[s[i]-'0'];
if(temp[n-1]==1)
{
fwrite(s+i-n+1,sizeof(s[0]),n,stdout);
puts("");
}
}
}
return 0;
}
A - Password Suspects UVALive - 4126
AC自动机上DP,ans[x][y][s]表示当前在x结点,已经用了y个字符,已经含有了s集合中的子串,之后还有多少种方法。
调了半天发现没考虑输入相同的子串。
int ch[111][27],pre[111],tag[111],ed;
int n,m;
void add(char *s,int x)
{
int temp=0;
while(*s)
{
int c=(*s)-'a';
if(!ch[temp][c])ch[temp][c]=++ed;
temp=ch[temp][c];
s++;
}
tag[temp]|=(1<<x);
}
queue<int> h;
void getpre()
{
re(i,0,25)if(ch[0][i])h.push(ch[0][i]);
while(!h.empty())
{
int x=h.front();h.pop();
tag[x]|=tag[pre[x]];
re(i,0,25)
{
if(!ch[x][i])
{
ch[x][i]=ch[pre[x]][i];
continue;
}
int vv=ch[x][i];
int k=pre[x];
pre[vv]=ch[k][i];
h.push(vv);
}
}
}
bool bo[105][28][1028];
LL ans[105][28][1028];
LL dfs(int x,int y,int s)
{
if(bo[x][y][s])return ans[x][y][s];
bo[x][y][s]=1;
if(y==n)return ans[x][y][s]=(s==(1<<m)-1)?1:0;
LL &aa=ans[x][y][s];
aa=0;
re(i,0,25)aa+=dfs(ch[x][i],y+1,s|tag[ch[x][i]]);
return aa;
}
char ss[332];
void out(int x,int y,int s)
{
if(y==n)
{
if(s==(1<<m)-1)ss[n]=0,puts(ss);
return ;
}
re(i,0,25)
{
int vv=ch[x][i];
if(bo[vv][y+1][s|tag[vv]]&&ans[vv][y+1][s|tag[vv]])
ss[y]=i+'a',out(vv,y+1,s|tag[vv]);
}
}
int tt;
char s[122];
int main()
{
// freopen("a.in","r",stdin);
while(~scanf("%d%d",&n,&m))
{
tt++;
if(!n)return 0;
ed=0;
Clear(pre,0);
Clear(ans,0);
Clear(bo,0);
Clear(ch,0);
Clear(tag,0);
re(i,1,m)strin(s+1),add(s+1,i-1);
getpre();
LL ans=dfs(0,0,0);
printf("Case %d: %lld suspects\n",tt,ans);
if(ans<=42)out(0,0,0);
}
return 0;
}
L - The Problem to Slow Down You UVALive - 7041
求两个字符串相同回文子串数目
构建回文树然后dfs相同结点(路径)
struct st
{
int ch[200010][27],sum[200010],len[200010],pre[200020],ed;
char s[200010];
int getpre(int x,int y)
{
while(s[y]!=s[y-len[x]-1])x=pre[x];
return x;
}
void Main()
{
ed=1;
Clear(ch[0],0),Clear(ch[1],0);
len[0]=0,len[1]=-1;
pre[0]=1;
strin(s+1);
int l=strlen(s+1),temp=0;
s[0]=-1;
re(i,1,l)
{
int now=getpre(temp,i);
if(!ch[now][s[i]-'a'])
{
int k=++ed;
sum[k]=0;
Clear(ch[k],0);
len[k]=len[now]+2;
pre[k]=ch[getpre(pre[now],i)][s[i]-'a'];
ch[now][s[i]-'a']=k;
}
sum[temp=ch[now][s[i]-'a']]++;
}
rre(i,ed,0)sum[pre[i]]+=sum[i];
}
}t[2];
LL ans;
void dfs(int t0,int t1)
{
if(t[0].len[t0]>0)ans+=1LL*t[0].sum[t0]*t[1].sum[t1];
re(i,0,25)if(t[0].ch[t0][i]&&t[1].ch[t1][i])dfs(t[0].ch[t0][i],t[1].ch[t1][i]);
}
int T;
int main()
{
inin(T);int tt=T;
while(T--)
{
ans=0;
t[0].Main();
t[1].Main();
dfs(0,0);
dfs(1,1);
printf("Case #%d: %lld\n",tt-T,ans);
}
return 0;
}
K - Om Nom and Necklace CodeForces - 526D
可以证明i-pre[i]是最短的循环节长度(B+A),然后判断是否能把i拆成k个循环节+一个长度小于循环节的串,或者直接拆成k+1个循环节,前者用二分判,后者直接判整除。
char a[1000010];
int pre[1000010];
void getpre(char *s)
{
int k=0;int n=strlen(s+1);
re(i,2,n)
{
while(k&&s[i]!=s[k+1])k=pre[k];
if(s[i]==s[k+1])k++;
pre[i]=k;
}
}
int n,k;
int main()
{
inin(n),inin(k);
strin(a+1);
getpre(a);
int len=strlen(a+1);
re(i,1,len)
{
int x=i-pre[i];
if(i%x==0&&(i/x)%(k+1)==0)putchar('1');
else
{
int l=1,r=i/x,mid;
while(l<r)
{
mid=(l+r)>>1;
if(i/(mid*x)>k)l=mid+1;
else r=mid;
}
if(i/(l*x)==k)putchar('1');
else putchar('0');
}
}
return 0;
}
BUAA Summer Practice 2017 #1 字符串专场的更多相关文章
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Day5模块-time和datetime模块
模块是封装一段代码来实现某种功能. 分为三类: 1.自定义模块 2.标准库,内置模块 3.开源模块 -------------------------------------------------- ...
- 自学Python5.4-内置模块(2)
内置模块(2) 7. xml8.conf9.requests10.logging11.paramiko12.time & datetime 时间相关的操作,时间主要分三种表示方式: 时间戳 ...
- DAX和Power BI中的参考日期表
本文使用Power BI模板描述DAX中的引用Date表,可以在Analysis Services模型中使用相同的技术.在Dax Date Template页面下载最新版本的模板. 为什么引用Date ...
- Python之旅Day6 模块应用
time datetime random os sys shutil pickle json shelv xml configparser hashlib subprocess logging re ...
- 算法(第四版)C# 习题题解——1.2
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- 自学Python6.4-内置模块(2)
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- JAVA基础——时间Date类型转换
在java中有六大时间类,分别是: 1.java.util包下的Date类, 2.java.sql包下的Date类, 3.java.text包下的DateFormat类,(抽象类) 4.java.te ...
- 模块讲解----time与date time(时间模块)
time和datetime 在python中,通常有一下几种方式来表示时间:1.时间戳:2.格式化时间字符串:3.元祖(struct_time):其中元祖(struct_time分为九个元素) UTC ...
随机推荐
- __x__(26)0907第四天__文档流_网页最底层
文档流 处在网页的最底层,表示的是一个页面中的位置. 创建的元素,默认都处于文档流中. 元素在文档流中的特点 块元素 在文档流中独占一行. 自上而下排列. 宽度默认占父元素的 100%,width=& ...
- ECMA Script 6_async 函数
async 函数 const promise = new Promise((resolve, reject)=>{ setTimeout(function(){ console.log(&quo ...
- 6.6 Pandora 实操 - API/SDK
创建实时仓库 连接日志仓库 点击到工作流查看 通过 Java sdk 打数据 通过 java sdk 对应字段打数据,先打到实时仓库(消息队列),对应再会打到日志仓库(做存储). 代码见 Sequen ...
- python全栈开发 * mysql * 180828
一.mysql概述\s 查看当前自己的信息1.mysql就是用于管理我们的文件的一个软件;2.mysql有两个软件: 服务器软件: socket服务端 本地文件操作 解析指令(mysql语句) 客户端 ...
- Sublime Text 3 使用心得
1.Ctrl + Shift + P : package control install package == > ConvertToUTF82.列模式: 苹果:OS X -鼠标左键+Optio ...
- Python 学习笔记4 变量-字符串
Python中的字符串,我们可以简单的认为是一组用单引号,双引号,三引号包含的一组字符,数字或者特殊字符.在Python3中,所有的字符串都是Unicode字符串. 变量定义 #单引号 string1 ...
- jmeter数据库连接配置
一.实际试过的mysql配置 1.导入一个JDBC jar包(我是直接把jar包放在了jmeter的lib目录),包:mysql-connector-java-5.1.7-bin.jar 2.设置JD ...
- Yocto和Android编译命令的简化和自动完成的实现
简化编译命令 无论是在Android编译系统中,还是在Yocto编译系统中,要编译一个目标,输入命令都有点费事. Yocto系统: source setup-environment $FOLDER b ...
- 第二单元电梯调度作业 By Wazaki
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- AD模块电压采集电路
之前一直没搞明白模拟电压转换电路,不知道应该怎么计算转换电压,最近一个项目中用到几处模拟电压的采集,硬件是由其他同事设计的,转换公式也是他给的,记录一下: 24V电压采集: 公式:Vout = Vin ...