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 ...
随机推荐
- OC与JS交互之WebViewJavascriptBridge
上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...
- 类变量方法,局部变量和成员变量的区别(this关键字的使用)
变量名首写字母使用小写,如果由多个单词组成,从第2个单词开始的其他单词的首写字母使用大写. 如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this class P ...
- 阻止冒泡 table表格取消选中最后一列
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PAT 1059. Prime Factors
反正知道了就是知道,不知道也想不到,很快 #include <cstdio> #include <cstdlib> #include <vector> using ...
- Stage3--Python控制流程及函数
说在前面: Stage1-Stage4简单介绍一下Python语法,Stage5开始用python实现一些实际应用,语法的东西到处可以查看到,学习一门程序语言的最终目的是应用,而不是学习语法,语法本事 ...
- java面试之----堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method)也叫静态存储区. 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的 ...
- js实现base64编码与解码(原生js)
一直以来很多人使用到 JavaScript 进行 base64 编码解码时都是使用的 Base64.js,但事实上,浏览器很早就原生支持 base64 的编码与解码了 以前的方式 编码: <ja ...
- 框架页面jquery装载
- Laravel 生成小程序图文海报最佳方案之一
目前已经更新 2.0 版本,支持生成的海报关联Model,支持是否重新生成海报等功能,具体更新请移步 github: laravel-miniprogram-poster 微信小程序官方并未提供分享到 ...
- 【Leetcode】【Easy】Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...