2018.7.31 Noip2018模拟测试赛(十六)
|
日期: |
七月最后一天 |
总分: |
300分 |
|
难度: |
提高 ~ 省选 |
得分: |
30分(少的可怜) |
我太弱了:(题目目录)
T1:Mushroom追妹纸
T2:抵制克苏恩
T3:美味
失分分析:(QAQ)
开始全部题目看了一遍,第二题期望dp,果断放弃……
看到T3,感觉像是线性基,但是要修改,似乎不可做……(QAQ)
只剩下T1,想到正解——后缀数组+KMP,结果忘记怎么打,耗了整个比赛……
最后T1打炸了,成功炸成屎……
剩下的二十分钟,赶紧打一个T3线性基暴力,但样例竟然过不了……
定睛一看,[○・`Д´・ ○],我TM竟然理解错题意了!!MMPPP!!
最后T3暴力30分………………
题解:
T1:Mushroom追妹纸
字符串题,前两个条件后缀数组求最长公共字串。
第三个条件,用 KMP 求出$s_3$在前两个串出现的位置,在统计答案的时候,不要选到$s_3$就好了
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n,n1,n2,n3,m,ans=;
int nxt[],pos[],f[];
int tp[],rak[],tax[];
char s[],s1[],s2[],s3[];
int height[],sa[]; void get_next(){
int i=,j=;
for(int i=;i<=n3;i++)nxt[i]=;
nxt[]=;
while(i<=n3){
if(j==||s3[i]==s3[j])
if(s3[++i]!=s3[++j])nxt[i]=j;
else nxt[i]=nxt[j];
else j=nxt[j];
}
} void solve(){
int i=,j=;
while(i<=n){
if(j==||s[i]==s3[j])i++,j++;
else j=nxt[j];
if(j>n3){
pos[++pos[]]=i-;
j=nxt[j];
}
}
} void sort(int a[],int b[]){
for(int i=;i<=m;i++)tax[i]=;
for(int i=;i<=n;i++)tax[a[i]]++;
for(int i=;i<=m;i++)tax[i]+=tax[i-];
for(int i=n;i>=;i--)sa[tax[a[b[i]]]--]=b[i];
} bool comp(int r[],int a,int b,int k){
return r[a]==r[b]&&r[a+k]==r[b+k];
} void get_sa(int a[],int b[]){
for(int i=;i<=n1;i++)s[i]=s1[i];
s[n1+]='$';
for(int i=;i<=n2;i++)s[n1+i+]=s2[i];
n=n1+n2+;
for(int i=;i<=n;i++)a[i]=s[i],b[i]=i;
m=,sort(a,b);
for(int j=,p=;p<n;j<<=,m=p){
p=;
for(int i=;i<=j;i++)b[++p]=n-j+i;
for(int i=;i<=n;i++)if(sa[i]>j)b[++p]=sa[i]-j;
sort(a,b);
int *t=a;a=b;b=t;
a[sa[]]=p=;
for(int i=;i<=n;i++)
a[sa[i]]=comp(b,sa[i],sa[i-],j)?p:++p;
}
for(int i=;i<=n;i++)rak[sa[i]]=i;
} void get_height(){
int i=,j=,k=;
for(i=;i<=n;height[rak[i++]]=k){
j=sa[rak[i]-];
if(k)k--;
while(s[i+k]==s[j+k])k++;
}
} int main(){
scanf("%s%s%s",s1+,s2+,s3+);
n1=strlen(s1+),n2=strlen(s2+),n3=strlen(s3+);
get_sa(rak,tp),get_height();
get_next(),solve();
for(int i=;i<=n;i++){
int *k=pos,s;
do{
k=lower_bound(k+,pos+pos[]+,i);
s=*k;
if(k-pos>pos[]){s=2e9;break;}
}while(*k-n3+<i);
f[i]=s-i;
}
for(int i=;i<=n;i++)
if((sa[i]<=n1&&sa[i-]>n1)||(sa[i]>n1&&sa[i-]<=n1))
ans=max(ans,min(height[i],min(f[sa[i]],f[sa[i-]])));
printf("%d",ans);
}
长啊!!(别人都是10几20毫秒,我竟然500ms+ MMP (▼ヘ▼#))
T2:抵制克苏恩
期望dp,$f[k][a][b][c]$ 表示攻击$k$次后,还剩$a$个 1 血,$b$个2血,$c$个3血,英雄受伤害的期望,直接递推!
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int T,n,m,K,A,B,C;
double f[][][][]; double dp(int k,int a,int b,int c){
if(k==)return ;
c=min(c,-a-b);
if(f[k][a][b][c])return f[k][a][b][c];
f[k][a][b][c]+=1.0/(a+b+c+)*(dp(k-,a,b,c)+);
if(a)f[k][a][b][c]+=1.0*a/(a+b+c+)*dp(k-,a-,b,c);
if(b)f[k][a][b][c]+=1.0*b/(a+b+c+)*dp(k-,a+,b-,c+);
if(c)f[k][a][b][c]+=1.0*c/(a+b+c+)*dp(k-,a,b+,c);
return f[k][a][b][c];
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&K,&A,&B,&C);
printf("%.2f\n",dp(K,A,B,C));
}
}
T3:美味
主席树,类似 Trie 树的思想,按位贪心;
用一个变量$a$从高位走,0就走1,1就走0;
主席树维护值域和区间,判断,具体看代码:
#include<iostream>
#include<cstdio>
using namespace std; int n,m,b,x,l,r,y,tot=,root[];
int sum[],lch[],rch[]; int read(){
int x=;char ch=;
while(ch<''||ch>''){ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x;
} void update(int &o,int last,int l,int r,int x){
o=++tot;
lch[o]=lch[last],rch[o]=rch[last],sum[o]=sum[last]+;
if(r-l==)return;
else{
int mid=l+r>>;
if(x<mid)update(lch[o],lch[last],l,mid,x);
else update(rch[o],rch[last],mid,r,x);
}
} int query(int o1,int o2,int l,int r,int x,int y){
if(l>=y||r<=x)return ;
if(l>=x&&r<=y)return sum[o2]>sum[o1];
int mid=l+r>>;
int ans=;
if(x<mid)ans|=query(lch[o1],lch[o2],l,mid,x,y);
if(y>mid)ans|=query(rch[o1],rch[o2],mid,r,x,y);
return ans;
} int main(){
n=read(),m=read();
for(int i=;i<=n;i+=){
x=read();
update(root[i],root[i-],,,x);
x=read();
update(root[i+],root[i],,,x);
}
register int i,j,a;
for(i=,a=;i<=m;++i,a=){
b=read(),x=read(),l=read(),r=read();
for(register int j=;~j;--j){
if(b&(<<j)){
int L=max(a-x,),R=a+(<<j)--x;
if(!query(root[l-],root[r],,,L,R+))a^=(<<j);//没法走0就走1
}else{
int L=max(a+(<<j)-x,),R=a+(<<j+)--x;
if(query(root[l-],root[r],,,L,R+))a^=(<<j);//能走1就走1
}
}
printf("%d\n",a^b);
}
}
成功 1960ms 卡过!!呵呵…… ┐(´∇`)┌
2018.7.31 Noip2018模拟测试赛(十六)的更多相关文章
- 2018.8.7 Noip2018模拟测试赛(二十)
日期: 八月七号 总分: 300分 难度: 提高 ~ 省选 得分: 100分(呵呵一笑) 题目列表: T1:SS T2:Tree Game T3:二元运算 赛后反思: Emmmmmm…… 开 ...
- 2018.8.6 Noip2018模拟测试赛(十九)
日期: 八月六号 总分: 300分 难度: 提高 ~ 省选 得分: 10分(MMP) 题目目录: T1:Tree T2:异或运算 T3:Tree Restoring 赛后反思: Emmmmm ...
- 2018.8.8 Noip2018模拟测试赛(二十一)
日期: 八月七号 总分: 300分 难度: 提高 ~ 省选 得分: 112分(OvO) 题目目录: T1:幸福的道路 T2:Solitaire T3:Flags 赛后心得: 第一题裸树d啊! ...
- 2017.8.2 Noip2018模拟测试赛(十八)
日期: 八月二日 总分: 300分 难度: 提高 ~ 省选 得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...
- 2017.8.1 Noip2018模拟测试赛(十七)
日期: 八月第一天 总分: 300分 难度: 提高 ~ 省选 得分: 100分(不应该啊!) 题目目录: T1:战争调度 T2:选数 T3:由乃的OJ 赛后心得: MMP,首先第一题花了大概 ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
随机推荐
- Servlet的引入(即加入Servlet)
今天讲的Servlet是根据上一章节<创建一个学生信息表,与页面分离>而结合. 一.看图分析 此模式有问题: 1.jsp需要呼叫javabean StudentService stuSer ...
- @private@protected@public@package
@private@protected@public@package 为了强制一个对象隐藏其数据,编译器限制实例变量范围以限制其在程序中的可见性 但是为了提供灵活性,苹果也让开发者显式设置范围(四选一) ...
- 【转】嵌入式操作系统VxWorks中TFFS文件系统的构建
时间:2005-02-20 来源:21IC中国电子网 作者:771所加固机工程部 蔡本华 高文炜 关键字:VxWorks TFFS 嵌入式操作系统 文件系统 摘要:目前的嵌入式 ...
- 如何下载并安装 robomongo 到Ubuntu 系统
官网下载软件,https://robomongo.org/download wget https://download.robomongo.org/1.2.1/linux/robo3t-1.2.1-l ...
- Ubuntu下搭建多用户多权限ftp
#1.切换root用户模式 (已在root模式下的请忽略) sudo -i #然后提示你输入当前用户密码,输入密码后回车后如果密码正确控制台就变成root@***:/# 了. #2.更新软件源 apt ...
- Powershell 备忘
如何修改环境变量 [environment]::SetEnvironmentvariable(“path”,"xxx","user") [environment ...
- vim小操作
初时,先有ed,ed为ex之父,ex为vi之父,而vi为vim之父 c 修改 d 删除 y 复制到寄存器 g~ 反转大小写 gu 反转为小写 gU 反转为大写 > 增加缩进 < 减小缩进 ...
- 拖拽图片到另一个div里
HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 如何用 CSS 和 D3 创作旋臂粒子动画
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJrOqd 可交互视频 ...
- 【kindle】【转发】kindle链接WIFI自动断开问题
在电脑上新建一个新文件,名为“WIFI_NO_NET_PROBE”,同时把后缀名删掉,让它变成一个无格式文件.Kindle 连接电脑,把新建的文件放进Kindle的根目录,断开Kindle之后重启Ki ...