日期:

七月最后一天

 总分:

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模拟测试赛(十六)的更多相关文章

  1. 2018.8.7 Noip2018模拟测试赛(二十)

    日期: 八月七号  总分: 300分  难度: 提高 ~ 省选    得分: 100分(呵呵一笑) 题目列表: T1:SS T2:Tree Game T3:二元运算 赛后反思: Emmmmmm…… 开 ...

  2. 2018.8.6 Noip2018模拟测试赛(十九)

    日期: 八月六号  总分: 300分  难度: 提高 ~ 省选    得分: 10分(MMP) 题目目录: T1:Tree T2:异或运算 T3:Tree Restoring 赛后反思: Emmmmm ...

  3. 2018.8.8 Noip2018模拟测试赛(二十一)

    日期: 八月七号  总分: 300分  难度: 提高 ~ 省选    得分: 112分(OvO) 题目目录: T1:幸福的道路 T2:Solitaire T3:Flags 赛后心得: 第一题裸树d啊! ...

  4. 2017.8.2 Noip2018模拟测试赛(十八)

     日期: 八月二日  总分: 300分  难度: 提高 ~ 省选  得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...

  5. 2017.8.1 Noip2018模拟测试赛(十七)

    日期: 八月第一天  总分: 300分  难度: 提高 ~ 省选    得分: 100分(不应该啊!) 题目目录: T1:战争调度 T2:选数 T3:由乃的OJ 赛后心得: MMP,首先第一题花了大概 ...

  6. [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania

    [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...

  7. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  8. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  9. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

随机推荐

  1. QT5:介绍

    一.简介 QT是一个跨平台的C++开发库,主要用来开发图形用户界面(Graphical User Interface,GUI) QT除了可以绘制漂亮的界面(包括控件/布局/交互),还可以多线程/访问数 ...

  2. Python基础篇 -- 集合

    set集合 set 中的元素是不重复的,无序的 里面的元素必须是可hash的,(int str tuple bool) set 就是dict 类型的数据,但是不保存value 只保存 key set集 ...

  3. x86,x64,i386,i686

    x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...

  4. java基础—流

    一.JAVA流式输入/输出原理

  5. 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

    静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...

  6. NSXMLParser

    NSXMLParser的使用 2011-05-05 15:50:17|  分类: 解析|字号 订阅     NSXMLParser解析xml格式的数据 用法如下: 首先,NSXMLParser必须继续 ...

  7. python入门:输出1-100之内的所有奇数和偶数(自写)

    #!/urs/bin/env python # -*- coding:utf-8 -*- #输出1-100之内的所有奇数和偶数(自写) """ 给x赋值等于1,wehil ...

  8. springboot maven 多环境配置

    1.使用Intellij IDEA创建Spring Boot和Maven项目 2.Spring Boot项目下application.yaml(yaml支持中文)或者application.prope ...

  9. 【linux】【rpm】确定程序是否 rpm 安装

    执行 rpm -qf 文件名如果结果显示出安装包那就说明是rpm (或者yum)安装 详情参看 rpm -v  (或者 man rpm) ​

  10. python模块之pickle

    和json不同的是: json只支持str,int,tuple,list,dict. pickle支持python里所有的数据类型,但是只能在python里序列化,不跨平台,python独有. 代码示 ...