bzoj 4900 [CTSC2017]密钥 模拟+乱搞
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4900
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector> #define N 40000007
#define FOR(a,b,c) for(int a=(b),a##_end__=(c);a<a##_end__;a++)
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int seed,n,k,S;
bool p[N];
int cnt[N],A[N];
int ans1,ans2,ans3;
void generateData(){
scanf("%d%d%d",&k,&seed,&S);
int t=;
n=k<<|;
FOR(i,,n+){
p[i]=(seed=((seed*)^)&)>>&;
t+=p[i];
}
int i=;
while(t>k){
while(!p[i]) i++;
p[i]=;t--;
}
while(t<k){
while(p[i])i++;
p[i]=;t++;
}
}
int main(){
generateData();
int T=;
FOR(i,,n+){
if(p[i]) cnt[A[i]=A[i-]+]++,T+=A[i]>A[];
else A[i]=A[i-]-;
}
FOR(i,,n+){
if(p[i]){
T-=cnt[A[i]];
cnt[A[i]-]++;
cnt[A[i]]--;
}
else{
T+=cnt[A[i]+];
if(T==) ans1=i;
if(T==S) ans2=i;
if(T==k-S) ans3=i;
}
}
printf("%d\n%d\n%d\n",ans1,ans2,ans3);
}
【CTSC2017】密钥
一个密钥是一个长度为 n=2k+1n=2k+1 的字符串,它包含 11 个字母X、kk 个字母 A 和 kk 个字母 B。例如 k=3k=3 时,BAXABAB 就是一个密钥。
如下图所示,可以按顺时针顺序把这 2k+12k+1 个字母排成一个圈:
在 kk 个字母 A 中,有一部分可以定义为"强的"。
具体来说,从 X 出发顺时针走到某个 A 时,如果途中 A 的数目严格多于 B 的数目,则称此字母 A 为强的。
对于上面的例子来说,顺时针方向从字母 X 数起第 11 个和第 22 个字母 A 是强的,而第 33 个字母 A 不是强的。
一个密钥的特征值就是其中包含的强的字母 A 的个数。
天才小朋友 KT 给出了一个结论:
假设 kk 个字母 A 所在的位置已经固定,但是剩下的 kk 个 B 和 11 个 X 的位置是未知的。 (注意,满足这样要求的密钥一共有 k+1k+1 个,因为字母 X 还剩下 k+1k+1 个可能的位置。)
可以证明:所有这k+1k+1个可能的密钥的特征值是各不相同的,它们恰好为0,1,2,…,k0,1,2,…,k。
下页的图是一个具体的示例,从左到右的四个子图中分别有3个,2个,1个,0个字母A是强的。
类似地,如果固定 kk 个字母 B 的位置,那满足条件的所有 k+1k+1 个密钥的特征值也各不相同,恰好为 0,1,⋯,k0,1,⋯,k。
现在你需要解决以下三个问题:
- 给定密钥中所有 A 的位置,当密钥的特征值为 00 时,请问 X 在哪个位置。
- 给定密钥中所有 A 的位置,当密钥的特征值为 SS 时,请问 X 在哪个位置。
- 给定密钥中所有 B 的位置,当密钥的特征值为 SS 时,请问 X 在哪个位置。
注意:字符串的 2k+12k+1 个字母的位置由 11 到 2k+12k+1 编号。
例子一
假定 k=3,S=2k=3,S=2。那么:
当 A 的位置是 {2,4,6}{2,4,6} 且特征值为 00 时,X 的位置在 77;
当 A 的位置是 {2,4,6}{2,4,6} 且特征值为 22 时,X 的位置在 33;
当 B 的位置是 {2,4,6}{2,4,6} 且特征值为 22 时,X 的位置在 55。
例子二
假定 k=9,S=7k=9,S=7。那么:
当 A 的位置是 {3,4,5,9,10,12,13,16,19}{3,4,5,9,10,12,13,16,19} 且特征值为 00 时,X 的位置在 1414;
当 A 的位置是 {3,4,5,9,10,12,13,16,19}{3,4,5,9,10,12,13,16,19} 且特征值为 77 时,X 的位置在 1818;
当 B 的位置是 {3,4,5,9,10,12,13,16,19}{3,4,5,9,10,12,13,16,19} 且特征值为 77 时,X 的位置在 1717。
输入格式
只包含一组测试数据。
第一行包含一个整数kk,意义如题所述。
第二行包含一个整数seedseed,这个数将用于生成一个kk元集合P。
第三行包含一个整数SS,意义如题所述。
保证0≤S≤k≤1070≤S≤k≤107。1≤seed≤100001≤seed≤10000。
在下发文件中,包含三个用于生成输入数据的文件cipher.cpp/c/pas
。其中读入部分已经完成,在数组 p[]p[] 中,若 p[i]=0p[i]=0,表示 ii 不属于集合PP,否则,ii 属于集合 PP。
输出格式
输出三行,每行一个数,依次对应问题描述中的三个子问题的答案。
即:
- 第一个数表示当 kk 元集合 PP 代表 A 的位置且特征值为 00 时 X 的位置。
- 第二个数表示当 kk 元集合 PP 代表 A 的位置且特征值为 SS 时 X 的位置。
- 第三个数表示当 kk 元集合 PP 代表 B 的位置且特征值为 SS 时 X 的位置。
样例一
input
5
3344
2
output
10
1
2
explanation
第一个样例中,PP 数组为 11 的元素的下标分别为 5,6,7,8,95,6,7,8,9。
样例二
input
500000
4545
234567
output
999992
246922
753067
限制与约定
对于 30%30% 的数据,k≤103k≤103。
对于 50%50% 的数据,k≤105k≤105。
对于 100%100% 的数据,k≤107k≤107。
对于每个测试点,得分为以下三部分得分之和:
- 如果第一问回答正确,你将获得 33 分。
- 如果第二问回答正确,你将获得 44 分。
- 如果第三问回答正确,你将获得 33 分。
如果你仅仅知道部分答案,请也务必按此格式要求输出三个数。否则你可能会因格式错误无法得分。
时间限制:1s1s
空间限制:512MB512MB
下载
bzoj 4900 [CTSC2017]密钥 模拟+乱搞的更多相关文章
- Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路
题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是 ...
- HDU 5929 Basic Data Structure(模拟 + 乱搞)题解
题意:给定一种二进制操作nand,为 0 nand 0 = 10 nand 1 = 1 1 nand 0 = 1 1 nand 1 = 0 现在要你模拟一个队列,实现PUSH x 往队头塞入x,POP ...
- 【BZOJ】2456 mode(乱搞)
Description 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数. Input 第1行一个正整数n.第2行n个正整数用空格隔开. Output 一行一个正整数表 ...
- ZOJ Monthly, January 2019 Little Sub and his Geometry Problem ZOJ4082(模拟 乱搞)
在一次被自己秀死... 飞机 题目: 给出N,K, Q; 给出一个N*N的矩阵 , 与K个特殊点 , 与Q次查询 , 每次查询给出一个C , 问 在这个N*N矩阵中 , 有多少的点是满足这样的一个关 ...
- BZOJ 4032 trie树+各种乱搞
思路 : 先对b 的所有后缀建立trie树 第一问 暴力枚举a串的起点 在trie树上跑 找到最短的 第二问 也是暴力枚举a串的起点 a和b顺着暴力匹配就好 第三问 求出来a在第i个位置 加一个字母j ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- BZOJ 1011--[HNOI2008]遥远的行星(乱搞)
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 5684 Solved ...
- 【BZOJ 4148】 4148: [AMPPZ2014]Pillars (乱搞)
4148: [AMPPZ2014]Pillars Time Limit: 5 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 100 Solve ...
- [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]
题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...
随机推荐
- appium启动APP配置参数:
一.Android启动app python启动脚本如下: from appium import webdriver desired_caps = {} desired_caps['plat ...
- 查看python中包的文档
核心命令:python -m pydoc 查询某包:python -m pydoc 包名 示例: C:\Users\xxx>python -m pydoc pydoc - the Python ...
- LeeCode第一次刷题(两数相加)
题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...
- 收割大厂offer需要具备的条件
转载出处 本人也一直在关注互联网,觉得还是有些了解.互联网要求是越来越高了,竞争的人太多了,不过你不用担心,个人觉得,你到了中层的水平,拿二线offer应该没问题,人多也有人多的好处,我比别人多努力一 ...
- vue移动音乐app开发学习(二):页面骨架的开发
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...
- 小茜(xi)的减肥之路
Description 今天,多年未见的小钧和小江在街头偶遇,小江想看看当年那个蠢蠢的小钧有没有变聪明一些,他灵机一动,说:“当初小茜立了个flag,说一定要减肥,她想着第一天跑一米,第二天跑两米,第 ...
- how to install pygraphviz on windows 10 with python 3.6
Here's what worked for me: Win 7 AMD64 Install MSFT C++ compiler. Install Anaconda for Win AMD64, Py ...
- IE中的activex控件
1.tree控件 DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HE ...
- Mininet实验 多个数据中心的拓扑网络实现
实验目的 掌握多数据中心网络拓扑的构建 掌握多数据中心数据交换过程 实验原理 主机间发送消息上报给交换机,交换机对收到的报文信息进行分析判断,如果交换机中存在此消息相对应的流表,则交换机直接下发流表, ...
- return语句的用法
1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...