ETO的公开赛T5《猎杀蓝色空间号》题解
这道题别看题面这么长,其实题意很简单
就是让你求从起点开始的最长合法区间
合法的要求有两个:兜圈子和直飞
且这两个条件相互独立
(也就是说兜圈子的末尾不会对下面可能出现的直飞造成影响)
举个例子:
1 2 3 2 1 5 4 3 8 9
这个序列他的合法长度是8
因为直飞是 5 4 3 8 9
1是兜圈子的末尾,对直飞无影响
这样看来,兜圈子比直飞优秀的多
因为如果直飞的某段属于兜圈子
那么把这一段归于兜圈子后对序列的合法性无影响
但如果兜圈子的某段属于直飞,那归于直飞后
剩下的这部分可能就不是兜圈子了
所以我们先用manacher跑出回文区间
用差分数组维护一下回文区间
如果在回文区间内,则不考虑
否则判断是否直飞即可
只要确保完全符合,就记下来这个区间和这个区间的末尾值
后面的就是贪心了
最优情况自然是你选的那条正好是飞船所在
飞船所在正好是最短的
最坏情况是你最后一次选到的是最短的
且这个位置是飞船所在
几率我们会惊讶的发现其实是一样的
排个序第二个也很好求
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
#define mod 19260817
using namespace std;
char s[],cp[];
int p[],cd,t,n,ans,cnt,jl[],cf[],lnt;
char zcq1[];
int zcq2[],m;
void ycl()
{
int k=;
cp[k]=;
k++;
for(rii=;i<=cd-;i++)
{
cp[k]='#';
k++;
cp[k]=s[i];
k++;
}
cp[k]='#';
k++;
cd=k;
}
void manacher()
{
ycl();
int mx=;
int last=;
for(rii=;i<=cd-;i++)
{
if(mx>i)
{
p[i]=min(p[*last-i],mx-i);
}
else
{
p[i]=;
}
while(cp[i+p[i]]==cp[i-p[i]])
{
p[i]++;
}
if(p[i]+i>mx)
{
mx=p[i]+i;
last=i;
}
}
}
void cfs()
{
for(rii=;i<=cnt;i++)
{
if(zcq2[i]>)
{
cf[i-(zcq2[i])/]++;
cf[i+(zcq2[i])/]--;
}
}
}
int yz()
{
int sl=,pre=,pd=;
for(rii=;i<=cnt;i++)
{
sl+=cf[i];
if(sl==&&cf[i]>=)
{
if(pre==)
{
pre=zcq1[i];
continue;
}
if(pd==)
{
if(zcq1[i]>pre)
{
pd=;
}
else
{
if(zcq1[i]==pre)
{
pd=;
}
else
{
pd=;
}
}
pre=zcq1[i];
continue;
}
if(pd==)
{
if(pre>zcq1[i])
{
return i;
}
else
{
pre=zcq1[i];
}
}
if(pd==)
{
if(pre<zcq1[i])
{
return i;
}
else
{
pre=zcq1[i];
}
}
}
else
{
pre=;
}
}
return cnt+;
}
long long pw(long long ds,int ms)
{
long long res=;
while(ms!=)
{
if(ms%==)
{
ms--;
res*=ds;
res%=mod;
}
else
{
ds*=ds;
ds%=mod;
ms/=;
}
}
return res;
}
bool cmp(int kl,int lk)
{
return kl<lk;
}
void sr()
{
memset(s,,sizeof(s));
memset(p,,sizeof(p));
memset(cf,,sizeof(cf));
for(rij=;j<t;j++)
{
s[j]=getchar();
}
getchar();
getchar();
}
void fz()
{
for(rij=;j<=cd-;j+=)
{
cnt++;
zcq1[cnt]=cp[j];
zcq2[cnt]=p[j]-;
}
}
int main()
{
scanf("%d %d",&n,&t);
scanf("%d ",&m);
for(rii=;i<=n;i++)
{
sr();
cd=t;
manacher();
cnt=;
fz();
cfs();
int bnt=cnt;
int ltt=yz();
if(ltt==m+)
{
lnt++;
jl[lnt]=pw(zcq1[bnt],zcq1[bnt]);
}
// printf("%d\n",ans-1);
}
if(lnt==)
{
cout<<"-1";
return ;
}
if(lnt==)
{
cout<<jl[]<<" "<<jl[]<<" 1.00000000 1.00000000";
return ;
}
sort(jl+,jl+lnt+,cmp);
int minx=jl[];
// jl[1];
int ant=;
long long js=;
for(rii=;i<=lnt;i++)
{
if(jl[i]==minx)
{
ant++;
}
else
{
break;
}
}
for(rii=;i<=lnt;i++)
{
js+=jl[i];
}
js*=;
js+=minx;
cout<<minx<<" "<<js<<" ";
double kn=((1.0)*ant)/lnt;
kn/=lnt;
printf("%.8lf %.8lf",kn,kn);
}
ETO的公开赛T5《猎杀蓝色空间号》题解的更多相关文章
- ETO的公开赛T3《寻星》 题解(BY 超級·考場WA怪 )
题解 寻星 题意:给定一个有向带权图,定义从一点到另一点的某条路径长为路径上所有边权的最大值,并给定四个点编号w,t1,t2,t3. 求出一个点s,使它在到t1,t2,t3三点最短路径最大值最大或者根 ...
- ETO的公开赛T2《宏聚变》 题解(BY 萌萌哒123456 )
我们注意到这道题中最多有 $(n+q)$ 个数被加入,而每个数最多被删除一次,因此每次操作 $O(logn)$的复杂度是可以接受的. 我们对于$1..100000$之间每个数分别开一个set,维护这个 ...
- ETO的公开赛T1《矿脉开采》题解(正解)(by Zenurik)
作为T1,当然是越水越好啦qwq 显然经目测可得,那个所谓的质量评级根本就没卵用,可以直接\(W_i = W_i^{V_i}\)累积到利润里面. 这样,本问题显然是一个"子集和"问 ...
- ETO的公开赛T4《对抗水滴》 题解(BY 萌萌哒123456 )
题意: 给你一个\(n*n\)的矩阵A,其中有\(T\)个元素不为零.定义矩阵内元素\((x,y)\)的能量值 \(E[x][y]=\sum_{i=1}^{x}\sum_{j=1}^{y}[A[i][ ...
- ETO的公开赛T1《矿脉开采》题解(另类版)
这道题别看是签到题,写起来一点不简单 出题人的正解是双向搜索 我们把物品分成两半 每一半分别跑搜索 答案存下来,用个双指针合并即可 然后我构造了两组数据卡掉了他,不得不缩小数据范围 但我这里为什么要致 ...
- 洛谷P1420 最长连号 题解
题目传送门 这道题我是打暴力的...(尴尬) 所以直接是O(N2)的时间,但好像没有炸,数据很水... #include<bits/stdc++.h> using namespace st ...
- AI将带我们走向何方?
AI即人工智能,对科幻着迷的博主对此认知颇深,打算从科幻电影入手,先讲下未来的AI将给人类带来哪些变化,哪些思考. 从最初的<星际航行>中的各种星球.地形等的介绍,到各个鉴于的探索,以及其 ...
- SDUT 3929
Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...
- 魔戒(思维+bfs)
Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...
随机推荐
- 新手的grid布局
html部分 <!DOCTYPE html><html><head><meta charset="utf-8"><link r ...
- html5 填表 表单 form label input button legend fieldset
<form>本身没有什么意义, 但是某些依赖form的标签元素一旦没有了form就不能生效. 所以form是提供一个定义环境给form的插件元素去生效的. 1.method 属性pos ...
- apk接入google play邮箱登陆及充值注意事项
unity3d 接入google play商店相关sdk,相关要求A.环境配置: 1.手机安装谷歌安装器 2.使用谷歌安装器安装Google 服务框架.Google Play服务.Google Pla ...
- Scope_Pre_Post
@Scope , 设置bean的生命周期,示例: @Scope(value="prototype")//设置生存范围,一般用 singleton或prototype 14.@P ...
- 快速开始Python/WSGI应用程序
快速开始Python-wsig应用程序 官方参考文档 安装 uwsgi 安装 pip install uwsgi uwsgi --version # 查看 uwsgi 版本 测试 uwsgi 是否正常 ...
- Linux下利用script命令录制并回放终端会话
Linux下利用script命令录制并回放终端会话 核心命令 script 和 scriptreplay 录制屏幕 script -t 2>timescript typescript 命令解释: ...
- gamemakerstudio:Sprite的原点
对于某些类型的游戏,例如飞行射击游戏或者顶视角的2D游戏,通常会直接选取图片的中心做为原点.但对于<冰杖秘闻>这样的 2D ARPG 来说,会更多的从三维场景的角度来选择原点,即选择物品底 ...
- DataBase Migration 使用笔记
Add-Migration 新建数据库迁移版本 Update-Database -Verbose 更新到数据库(-Verbose 显示详细信息) Update-Database –TargetMigr ...
- 在centos7中安装redis,并通过node.js操作redis
引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...
- strtoul (将字符串转换成无符号长整型数)
strtoul strtoul (将字符串转换成无符号长整型数) 相关函数 atof,atoi,atol,strtod,strtol 表头文件 #include<stdlib.h> 定义函 ...