5.4QBXT 模拟赛 (Rank1 机械键盘 蛤蛤)
NOIP2016提高组模拟赛
——By wangyurzee7
中文题目名称 |
纸牌 |
杯具 |
辣鸡 |
英文题目与子目录名 |
cards |
cups |
spicychicken |
可执行文件名 |
cards |
cups |
spicychicken |
输入文件名 |
cards.in |
cups.in |
spicychicken.in |
输出文件名 |
cards.out |
cups.out |
spicychicken.out |
每个测试点时限 |
1秒 |
1秒 |
1秒 |
测试点数目 |
16 |
10 |
10 |
每个测试点分值 |
6.25 |
10 |
10 |
题目类型 |
传统 |
传统 |
传统 |
运行内存上限 |
128M |
256M |
512M |
注意:评测时不打开任何优化开关
纸牌
(cards.cpp/c/pas)
【问题描述】
纸牌选手wyz喜欢玩纸牌。
wyz有2n张纸牌,点数分别为1到2n。wyz要和你玩一个游戏,这个游戏中,每个人都会分到n张卡牌。游戏一共分为n轮,每轮你们都要出一张牌,点数大者获胜。
不自量力的wyz觉得你很菜,于是每轮他都会先于你出牌,你可以根据他出的牌来做决策。
游戏开始了,你拿到了你的牌,你现在想知道,你最多能够获胜几轮?
【输入格式】
输入到cards.in
第一行1个正整数n。
第2行到第n+1行每行一个正整数a[i],表示你的第i张牌的点数。
【输出格式】
输出到cards.out
一行一个整数表示你最多能够获胜的轮数。
【输入输出样例】
cards.in |
cards.out |
2 1 4 |
1 |
【数据范围】
对于32.5%的数据,保证1<=n<=100
对于100%的数据,保证1<=n<=50,000
保证数据的合法性,即你即不会拿到重复的牌,又不会拿到超出点数范围的牌。
略水。。
- #include <algorithm>
- #include <cstdio>
- #define N 50001
- using namespace std;
- int ans,cnt,n,a[N],b[N],f[N];
- bool fw[N*],vis[N*];
- void read(int &x)
- {
- x=;
- bool f=;
- char ch=getchar();
- while(ch>''||ch<'')
- {
- if(ch=='-') f=;
- ch=getchar();
- }
- while(ch>=''&&ch<='')
- {
- x=x*+ch-'';
- ch=getchar();
- }
- x=f?(~x+):x;
- }
- int max(int a,int b)
- {
- return a>b?a:b;
- }
- int main()
- {
- freopen("cards.in","r",stdin);
- freopen("cards.out","w",stdout);
- read(n);
- for(int i=;i<=n;i++)
- read(a[i]),fw[a[i]]=;
- sort(a+,a+n+);
- for(int i=;i<=*n;i++)
- if(!fw[i]) b[++cnt]=i;
- sort(b+,b++cnt);
- for(int i=;i<=cnt;i++)
- {
- int l=,r=n,pos,p=0x7fffffff;
- while(l<=r)
- {
- int mid=(l+r)/;
- if(a[mid]>b[i]&&!vis[mid])
- {
- if(a[mid]<p)
- {
- p=a[mid];
- pos=mid;
- }
- r=mid-;
- }
- else l=mid+;
- }
- vis[pos]=;
- if(p!=0x7fffffff) ans++;
- }
- printf("%d",ans);
- return ;
- }
二分
杯具
(cups.cpp/c/pas)
【问题描述】
杯具选手wyz喜欢玩杯具。
wyz有2个容量分别为n单位、m单位的没有刻度的杯具。wyz有t分钟可以摆弄他的杯具。每一分钟,他都可以做下面4件事中的任意一件:
(1)用水龙头放满一个杯具。
(2)倒空一个杯具。
(3)把一个杯具里的水倒到另一个杯具里,直到一个杯具空了或者另一个杯具满了。(看哪种情况先发生)
(4)什么都不做。
wyz希望最后能获得d个单位的水,假设最后两个杯具中水量的总和为x,那么他的不开心度就为|d-x|。
现在你想知道,wyz的不开心度最小是多少。
【输入格式】
输入到cups.in
第一行4个整数n、m、t、d,分别表示两个杯具的容量、时间限制以及期望值。
【输出格式】
输出到cups.out
一行一个整数表示wyz的最小不开心度。
【输入输出样例】
cups.in |
cups.out |
7 25 2 16 |
9 |
【数据范围】
对于10%的数据,保证t=1
对于20%的数据,保证t<=2
对于40%的数据,保证t<=4
对于100%的数据,保证1<=n,m<=100,1<=t<=100,1<=d<=200
dp题 ,完全不会写,只会打爆搜。。
- #include <cstdio>
- void read(int &x)
- {
- x=;bool f=;char ch=getchar();
- while(ch>''||ch<'')
- {
- if(ch=='-') f=;
- ch=getchar();
- }
- while(ch>=''&&ch<='')
- {
- x=x*+ch-'';
- ch=getchar();
- }
- x=f?(~x)+:x;
- }
- int h1,h2,n,m,t,d,ans=0x7fffffff;
- int abs(int x) {return x>?x:-x;}
- int min(int a,int b) {return a>b?b:a;}
- void dfs(int r1,int r2,int T)
- {
- if(T==t)
- {
- ans=min(ans,abs(d-(r1+r2)));
- return;
- }
- for(int i=;i<=;i++)
- {
- if(i==)
- {
- if(r1<n) dfs(n,r2,T+);
- if(r2<n) dfs(r1,m,T+);
- if(r1==n&&r2==m) dfs(r1,r2,T+);
- else dfs(r1,r2,T+);
- }
- if(i==)
- {
- if(r1!=) dfs(,r2,T+);
- if(r2!=) dfs(r1,,T+);
- if(r1==&&r2==) dfs(r1,r2,T+);
- else dfs(r1,r2,T+);
- }
- if(i==)
- {
- if(r1+r2<=n) dfs(r1+r2,,T+);
- if(n-r1>r2) dfs(n,r2-(n-r1),T+);
- if(r1+r2<=m) dfs(,r1+r2,T+);
- if(m-r2>r1) dfs(r1-(m-r2),m,T+);
- dfs(r1,r2,T+);
- }
- if(i==) dfs(r1,r2,T+);
- }
- }
- int main()
- {
- freopen("cups.in","r",stdin);
- freopen("cups.out","w",stdout);
- read(n);
- read(m);
- read(t);
- read(d);
- if(t==)
- {
- printf("%d",min(abs(n-d),min(abs(m-d),d)));
- return ;
- }
- else ans=min(abs(n-d),min(abs(m-d),d)),dfs(,,);
- printf("%d",ans);
- return ;
- }
爆搜40分。
- //This program is designed by KHAOCE_Hydroge the member of the standing committee in Handong provincial committee.#include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <cstdio>
- #define N 101
- #define M 101
- #define D 201
- #define T 101
- using namespace std;
- int dp[N][M][T];
- int n, m, t, d;
- int dfs(int x, int y, int z) {
- if (dp[x][y][z] != 0x3f3f3f3f) return dp[x][y][z];
- if (z > t) {
- return dp[x][y][z] = abs(x + y - d);
- }
- int xx = n - x;
- int yy = m - y;
- dp[x][y][z] = min(dp[x][y][z], dfs(n, y, z + ));
- dp[x][y][z] = min(dp[x][y][z], dfs(x, m, z + ));
- dp[x][y][z] = min(dp[x][y][z], dfs(, y, z + ));
- dp[x][y][z] = min(dp[x][y][z], dfs(x, , z + ));
- dp[x][y][z] = min(dp[x][y][z], dfs(x, y, z + ));
- if (x > yy)
- dp[x][y][z] = min(dp[x][y][z], dfs(x - yy, m, z + ));
- if (x < yy)
- dp[x][y][z] = min(dp[x][y][z], dfs(, y + x, z + ));
- if (y > xx)
- dp[x][y][z] = min(dp[x][y][z], dfs(n, y - xx, z + ));
- if (y < xx)
- dp[x][y][z] = min(dp[x][y][z], dfs(x + y, , z + ));
- return dp[x][y][z];
- }
- int main() {
- freopen("cups.in", "r", stdin);
- freopen("cups.out", "w", stdout);
- memset(dp, 0x3f, sizeof dp);
- scanf("%d%d%d%d", &n, &m, &t, &d);
- dfs(, , );
- printf("%d", dp[][][]);
- return ;
- }
同班大佬的记忆化搜索
辣鸡
(spicychicken.cpp/c/pas)
【问题描述】
辣鸡选手wyz喜欢辣鸡。
wyz在后院养了许多辣鸡。wyz的后院可以看成一个A*B的矩形,左下角的坐标为(0,0),右上角的坐标为(A,B)。
wyz还在后院里建了许多栅栏。有n个平行于y轴的栅栏a1..an,表示挡在(ai,0)到(ai,B)之间。有m个平行于x轴的栅栏b1..bn,表示挡在(0,bi)到(A,bi)之间。这样,平面被划成了(n+1)*(m+1)块辣鸡的活动区域。
为了方便辣鸡的活动,wyz现在要去掉某些栅栏的一部分,使得每一块活动区域都连通。
同时,每次修改栅栏只能去掉从某个交点到另一个交点的一整段栅栏。举(打)个比(栗)方(子):
原来是这样的布局,经过修改可以变成这样:
现在,wyz想知道,要使得每一块辣鸡活动区域都联通,最少需要去掉多少长度的栅栏。
【输入格式】
输入到spicychicken.in
第一行4个正整数A、B、n、m,描述了后院的大小和两种栅栏的数目。
第2行到第n+1行,每行1个正整数,第i+1行的数描述了a[i]。
第n+2行到第n+m+1行,每行1个正整数,第n+i+1行的数描述了b[i]。
【输出格式】
输出到spicychicken.out
一行一个整数表示需要去掉的栅栏的最小长度总和。
【输入输出样例】
spicychicken.in |
spicychicken.out |
15 15 5 2 2 5 10 6 4 11 3 |
44 |
【数据范围】
对于10%的数据,A,B<=1000,n,m<=20
对于30%的数据,A,B<=1000,000,n*m<=25,000
对于40%的数据,n*m<=250,000
对于50%的数据,n*m<=4,000,000
对于100%的数据,1<=A,B<=1000,000,000,1<=n,m<=25,000
数据保证0<a[i]<A,0<b[i]<B
最小生成树
5.4QBXT 模拟赛 (Rank1 机械键盘 蛤蛤)的更多相关文章
- 冲刺$\mathfrak{CSP-S}$集训模拟赛总结
开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...
- Tickeys -- 找对打字的感觉 (机械键盘音效软件)
最近发现公司里面越来越多人开始用机械键盘了,问了很多人为什么用机械键盘,主要有两种,一种是真的情怀,他们怀念十年前那种台式机硬邦邦的键盘,另外一种是因为喜欢机械键盘的声音,打字很爽.前者那真是没救了, ...
- mac下的改装人生——关于机械键盘
这几天好像弄了很多关于机械键盘的东西,我自己的这块键盘也已经慢慢熟悉了,感觉打字超级爽哈,然后看了很多网上关于机械键盘的帖子,也看了很多教程,在Amazon和Taobao看了很多键盘的价位,前几天还试 ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- 串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
前几天liu_runda来机房颓废,顺便扔给我们一个网址,说这上面有模拟赛,让我们感兴趣的去打一打.一开始还是没打算去看一下的,但是听std说好多人都打,想了一下,还是打一打吧,打着玩,然后就丢脸了. ...
- 模拟赛小结:2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)
比赛链接:传送门 本场我们队过的题感觉算法都挺简单的,不知道为啥做的时候感觉没有很顺利. 封榜后7题,罚时1015.第一次模拟赛金,虽然是北欧的区域赛,但还是有点开心的. Problem B Best ...
- 模拟赛小结:2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest
2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 2019年10月11日 15:35-20:35(Solved 8,Penalty 675 ...
- 模拟赛小结:2014-2015 ACM-ICPC, NEERC, Southern Subregional Contest
2014-2015 ACM-ICPC, NEERC, Southern Subregional Contest 2019年10月11日 15:30-20:30(Solved 6,Penalty 740 ...
- 普通键盘Windows上虚拟Cherry机械键盘效果的方法
草台班子--普通键盘Windows上虚拟Cherry机械键盘效果的方法 机械键盘以其独特的手感.绚丽的外形,还有那人神共愤的音效吸引着大批爱好者.最近iQQO 3的机械键盘效果更是吸引了更多 ...
随机推荐
- Ruby的一些常用全局变量
$! latesterror message $@ locationof error $_ stringlast read by gets $. linenumber last read by int ...
- Goland软件使用教程(一)
Goland软件使用教程(一) Goland是由JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE.这个IDE整合了IntelliJ平台的有关go语言的编码辅助功 ...
- 第十六周 Leetcode 600. Non-negative Integers without Consecutive Ones(HARD) 计数dp
Leetcode600 很简单的一道计数题 给定整数n 求不大于n的正整数中 二进制表示没有连续的1的数字个数 在dp过程中只要保证不出现连续1以及大于n的情况即可. 所以设计按位dp[i][j]表示 ...
- 去除inline-block的间隙
产生间隙的原因就是标签之间的空格,去除的方法: 1 设置父元素的font-size:0;空格字符的宽高都为0, <div class="demo1 demo2"> &l ...
- HDU-ACM“菜鸟先飞”冬训系列赛——第10场
Problem A 题意 给出l(房子宽度),d(pole距离房子的垂直距离),s(绳子长度),求可覆盖的面积 分析 一共四种情况 \[1.s<=d\] \[2.s<=sqrt(d*d+l ...
- bzoj 2157: 旅游【树链剖分+线段树】
裸的树链剖分+线段树 但是要注意一个地方--我WA了好几次才发现取完相反数之后max值和min值是要交换的-- #include<iostream> #include<cstdio& ...
- bzoj 2229: [Zjoi2011]最小割【Gomory–Hu tree最小割树】
这个算法详见http://www.cnblogs.com/lokiii/p/8191573.html 求出两两之间最小割之后暴力统计即可 #include<iostream> #inclu ...
- bzoj 3930: [CQOI2015]选数【递推】
妙啊 这个题一上来就想的是莫比乌斯反演: \[ f(d)=\sum_{k=1}^{\left \lceil \frac{r}{d} \right \rceil}\mu(k)(\left \lceil ...
- bzoj 3779: 重组病毒【LCT+线段树维护dfs序】
%.8lf会WA!!%.8lf会WA!!%.8lf会WA!!要%.10lf!! 和4817有点像,但是更复杂. 首先对于操作一"在编号为x的计算机中植入病毒的一个新变种,在植入一个新变种时, ...
- centos 允许远程连接mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;