2016-2017 National Taiwan University World Final Team Selection Contest J - Zero Game
题目:
You are given one string S consisting of only '0' and '1'. You are bored, so you start to play with the string. In each operation, you can move any character of this string to some other position in the string. For example, suppose . Then you can move the first zero to the tail, and S will become '0100'.
Additionally, you have Q numbers K1, K2, ..., KQ. For each i, you wonder what can be the maximum number of consecutive zeroes in the string if you start with S and use at most Ki operations. In order to satisfy your curiosity, please write a program which will find the answers for you.
Input
The first line of input contains one string S. The second line of input contains one integer Q. Each of the following Q lines contains one integer Ki indicating the maximum number of operations in i-th query.
- 2 ≤ N ≤ 106
- the length of S is exactly N characters
- S consists of only '0' and '1'
- 1 ≤ Q ≤ 105
- N × Q ≤ 2 × 107
- 1 ≤ Ki ≤ 106
Output
For each query, output one line containing one number: the answer for this query.
Example
0000110000111110
5
1
2
3
4
5
5
8
9
9
9 思路:
对于每个区间[l,r],如果sum[r]-sum[l-1]<=k,则说明可以区间内所有1踢掉,然后还可以加入k-(sum[r]-sum[l1])个0进来。
所以合法区间的贡献为(2*sum[l-1]-l)+(r-2*sum[r])+k+1.
将判断合法的等式变形,可以得到:sum[r]-k<=sum[l-1]
可以看出合法的r单调,所以可以枚举l,用单调队列维护答案。
#include <bits/stdc++.h> using namespace std; #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=1e9+; int n,m,k,sum[K],q[K];
char ss[K];
int main(void)
{
scanf("%s",ss+);
n=strlen(ss+);
for(int i=;i<=n;i++) sum[i]=sum[i-]+(ss[i]==''?:);
scanf("%d",&m);
while(m--)
{
int k,ans=,st=,se=;
scanf("%d",&k);
for(int i=,j=;i<=n;i++)
{
while(j<=n&&sum[j]-k<=sum[i-])
{
while(st>se&&q[st]-*sum[q[st]]<=j-*sum[j]) st--;
q[++st]=j++;
}
while(st>se&&q[se+]<i) se++;
ans=max(ans,*sum[i-]-i+q[se+]-*sum[q[se+]]+k+);
}
ans=max(,ans);
ans=min(ans,n-sum[n]);
printf("%d\n",ans);
}
return ;
}
2016-2017 National Taiwan University World Final Team Selection Contest J - Zero Game的更多相关文章
- 2016-2017 National Taiwan University World Final Team Selection Contest
A. Hacker Cups and Balls 二分答案,将$\geq mid$的数看成$1$,$<mid$的数看成$0$,用线段树进行区间排序检查即可.时间复杂度$O(n\log^2n)$. ...
- 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解
D 考虑每个点被删除时其他点对它的贡献,然后发现要求出距离为1~k的点对有多少个. 树分治+FFT.分治时把所有点放一起做一遍FFT,然后减去把每棵子树单独做FFT求出来的值. 复杂度$nlog^ ...
- 2016-2017 National Taiwan University World Final Team Selection Contest C - Crazy Dreamoon
题目:Statements Dreamoon likes algorithm competitions very much. But when he feels crazy because he ca ...
- 2016-2017 National Taiwan University World Final Team Selection Contest A - Hacker Cups and Balls
题目: Dreamoon likes algorithm competitions very much. But when he feels crazy because he cannot figur ...
- sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
The Android University ACM Team Selection Contest Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里 ...
- 【转】2016/2017 Web 开发者路线图
链接:知乎 [点击查看大图] 原图来自LearnCodeAcademy最火的视频,learncode是YouTube上最火的Web开发教学频道,介绍包括HTML/CSS/JavaScript/Subl ...
- luogu 1327 数列排序 & 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节
luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...
- Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
A. As Easy As Possible 每个点往右贪心找最近的点,可以得到一棵树,然后倍增查询即可. 时间复杂度$O((n+m)\log n)$. #include <bits/stdc+ ...
- Mindjet MindManager 2016/2017 折腾记录
https://community.mindjet.com/mindjet/topics/ensure-2017-64-bit-version-installation Mindmanager sho ...
随机推荐
- A*寻路算法(曼哈顿距离)
前一些天,在群有人问到A*算法的问题. 之前我已经有实现过,并将之放到github上(https://github.com/XJM2013/A_Star).有兴趣的能够下载下来看看. 这里上传了一个相 ...
- cookie是什么,在什么地方会用到
1.它是由服务器存储在硬盘上一的上小型txt文件 2..cookie也可以理解为缓存,方便下次浏览,推介等作用
- [SCOI2010]序列操作[分块or线段树]
#include<cstdio> #include<iostream> #define lc k<<1 #define rc k<<1|1 using ...
- LeetCode-Add and Search Word
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- asfd
$$\sum_{i=1}^n a_i=0$$$$f(x)=x^{x^x}$$
- sql server下划线查询
select * from tablea A where A.b like '%[_]%'
- webpack4学习笔记(二)
webpack打包各种javascript文件 (本文只是提供一个学习记录,大部分内容来自网络) 一,打包js文件和es6代码 1,webpack命令打包js文件 Tip: 在webpack4.x之前 ...
- Top 10 Algorithms of 20th and 21st Century
Top 10 Algorithms of 20th and 21st Century MATH 595 (Section TTA) Fall 2014 TR 2:00 pm - 3:20 pm, Ro ...
- DEV中gridview常用属性
1.隐藏最上面的GroupPanel: gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值: sValue=Table.Rows[g ...
- 6.2 - BBS + BLOG系统
一.简介 博客系统开发: 1.注册,登录,首页 2.个人站点,分组:(分类,标签,归档)3.文章详细页4.点赞,踩灭5.评论楼,评论树6.后台管理,发布文章,文件上传7.BeautifulSoup8. ...