codeforces701C
They Are Everywhere
大B,年轻的口袋妖怪训练师,找到了一个由 n 间从左向右的房间组成的大房子。你可以从街道里走入任何一间房子,也可以从任何一间房子走到街道上。同时,你也可以从左边的一个房间走向右边的房间。房间 1 只和房间2相连 2 并且房间 n 只和房间 n - 1.相连。
在每个房间中恰好有一只某个种类的口袋妖怪,用一个大写或小写字母表示。现在大B要走入其中一间房间,向右走一些房间并捕捉所有路过的房间的口袋妖怪,之后再在某个房间出来。问大B至少要走多少个房间才能捕捉到所有种类的口袋妖怪?
Input
第一行包含一个整数 n (1 ≤ n ≤ 100 000) — 表示房间中口袋妖怪的数量。
第二行包含一个字符串 s 长度为 n,只包含大小写字母,第 i 个字符表示在第 i 个房间中的口袋妖怪种类。
Output
输出最少走过的房间数。
Example
3
AaA
2
7
bcAAcbc
3
6
aaBCCe
5
Note
第一个样例中从 1 走到 2。
第二个样例中从 4 走到 6.
第三个样例中从 2 走到 6.
sol:枚举右端点,对于一个右端点R,显然如果L满足区间[L,R]可以覆盖全部,[L-1,R]一定也可以,这样就可以二分了
复杂度玄学O(n*logn*52)一看就是CF能过的复杂度qaq
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n;
char S[N];
int Qzh[N][];
int Need[];
inline char Get(char ch)
{
if(islower(ch)) return ch-'a';
else return ch-'A'+;
}
inline bool Judge(int Pos,int R)
{
int i;
for(i=;i<;i++) if(Need[i])
{
if(Qzh[R][i]-Qzh[Pos][i]==) return false;
}
return true;
}
inline int Check(int ql,int qr,int R)
{
int l=ql,r=qr,mid;
while(l<=r)
{
mid=(l+r)>>;
if(Judge(mid,R)) l=mid+;
else r=mid-;
}
return r;
}
int main()
{
int i,j,ans;
ans=n=read();
scanf("%s",S+);
for(i=;i<=n;i++)
{
for(j=;j<;j++) Qzh[i][j]=Qzh[i-][j];
Qzh[i][Get(S[i])]++;
}
for(i=;i<;i++) if(Qzh[n][i]) Need[i]=;
for(i=;i<=n;i++)
{
bool Bo=;
for(j=;j<;j++) if(Need[j]&&(!Qzh[i][j])) {Bo=; break;}
if(!Bo) break;
}
for(;i<=n;i++)
{
int Pos=Check(,i-,i);
ans=min(ans,i-Pos);
}
Wl(ans);
return ;
}
/*
input
3
AaA
output
2
*/
codeforces701C的更多相关文章
随机推荐
- 【Codeforces 142C】Help Caretaker
Codeforces 142 C 题意:给一个\(n\times m\)的空矩阵,求里面放最多的可旋转的\(T\)字形的个数,并输出方案. 思路1: 由于\(n\)和\(m\)比较小,所以可以尝试搜索 ...
- hibernate4使用原生jdbc进行批处理
在hibernate中,有一级缓存session和二级缓存sessionFactory这些机制,一方面为编码提供了便利,同时也会有一些副作用.比如有较大的数据量交互的话,缓存反而会降低效率.最近在做一 ...
- Omi框架学习之旅 - 插件机制之omi-touch 及原理说明
这个插件也能做好多好多的事,比如上拉下拉加载数据,轮播,等一切和运动有关的特效. 具体看我的allowTouch这篇博客,掌握了其用法,在来看它是怎么和omi结合的.就会很简单. 当然使用起来也比较方 ...
- [04] Bean的实例化和多个配置文件
之前我们已经提到过,Spring的核心能力之一就是IOC机制,从上章的示例中我们也可以看到,Spring中的ApplicationContext充当了一个实例化对象的容器的角色,并管理着它们的生命周期 ...
- curl发送json格式数据
php的curl方法详细的见官方手册. curl_setopt用法: http://www.php.net/manual/en/function.curl-setopt.php <?php $ ...
- php实现一个简单的四则运算计算器
php实现一个简单的四则运算计算器(还不支持括号的优先级).利用栈这种数据结构来计算表达式很赞. 这里可以使用栈的结构,由于php的数组“天然”就有栈的特性,这里直接就利用了数组.当然可以使用栈结构写 ...
- OSC Source Code Innovation Salon(2018.10.20)
时间:2018.10.20地点:北京 朝阳 浦项中心B座2层
- Linux下修改/设置环境变量JAVA_HOME
export设置只对当前的bash登录session有效.这是存在内存里面的.你可以写入文件一般的文件.之后source它.或者放到/etc/profile 等等的位置里,不同的地方效果不同. 1. ...
- [Deep-Learning-with-Python]GAN图片生成
GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...
- 生成线上用https证书,支持通配符和多域名,初学Let’s Encrypt用于IIS,纯本地手动
自简书发布的上篇<生成本地测试用https证书,支持通配符和多域名,初学OpenSSL>以来,本地测试用https用的妥妥的. 线上一直用的腾讯云的免费证书(每个域名都要一个证书(滑稽), ...