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

保证数据的合法性,即你即不会拿到重复的牌,又不会拿到超出点数范围的牌。

略水。。

  1. #include <algorithm>
  2. #include <cstdio>
  3. #define N 50001
  4.  
  5. using namespace std;
  6. int ans,cnt,n,a[N],b[N],f[N];
  7. bool fw[N*],vis[N*];
  8. void read(int &x)
  9. {
  10. x=;
  11. bool f=;
  12. char ch=getchar();
  13. while(ch>''||ch<'')
  14. {
  15. if(ch=='-') f=;
  16. ch=getchar();
  17. }
  18. while(ch>=''&&ch<='')
  19. {
  20. x=x*+ch-'';
  21. ch=getchar();
  22. }
  23. x=f?(~x+):x;
  24. }
  25. int max(int a,int b)
  26. {
  27. return a>b?a:b;
  28. }
  29. int main()
  30. {
  31. freopen("cards.in","r",stdin);
  32. freopen("cards.out","w",stdout);
  33. read(n);
  34. for(int i=;i<=n;i++)
  35. read(a[i]),fw[a[i]]=;
  36. sort(a+,a+n+);
  37. for(int i=;i<=*n;i++)
  38. if(!fw[i]) b[++cnt]=i;
  39. sort(b+,b++cnt);
  40. for(int i=;i<=cnt;i++)
  41. {
  42. int l=,r=n,pos,p=0x7fffffff;
  43. while(l<=r)
  44. {
  45. int mid=(l+r)/;
  46. if(a[mid]>b[i]&&!vis[mid])
  47. {
  48. if(a[mid]<p)
  49. {
  50. p=a[mid];
  51. pos=mid;
  52. }
  53. r=mid-;
  54. }
  55. else l=mid+;
  56. }
  57. vis[pos]=;
  58. if(p!=0x7fffffff) ans++;
  59. }
  60. printf("%d",ans);
  61. return ;
  62. }

二分

杯具

(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题 ,完全不会写,只会打爆搜。。

  1. #include <cstdio>
  2. void read(int &x)
  3. {
  4. x=;bool f=;char ch=getchar();
  5. while(ch>''||ch<'')
  6. {
  7. if(ch=='-') f=;
  8. ch=getchar();
  9. }
  10. while(ch>=''&&ch<='')
  11. {
  12. x=x*+ch-'';
  13. ch=getchar();
  14. }
  15. x=f?(~x)+:x;
  16. }
  17. int h1,h2,n,m,t,d,ans=0x7fffffff;
  18. int abs(int x) {return x>?x:-x;}
  19. int min(int a,int b) {return a>b?b:a;}
  20. void dfs(int r1,int r2,int T)
  21. {
  22. if(T==t)
  23. {
  24. ans=min(ans,abs(d-(r1+r2)));
  25. return;
  26. }
  27. for(int i=;i<=;i++)
  28. {
  29. if(i==)
  30. {
  31. if(r1<n) dfs(n,r2,T+);
  32. if(r2<n) dfs(r1,m,T+);
  33. if(r1==n&&r2==m) dfs(r1,r2,T+);
  34. else dfs(r1,r2,T+);
  35. }
  36. if(i==)
  37. {
  38. if(r1!=) dfs(,r2,T+);
  39. if(r2!=) dfs(r1,,T+);
  40. if(r1==&&r2==) dfs(r1,r2,T+);
  41. else dfs(r1,r2,T+);
  42. }
  43. if(i==)
  44. {
  45. if(r1+r2<=n) dfs(r1+r2,,T+);
  46. if(n-r1>r2) dfs(n,r2-(n-r1),T+);
  47. if(r1+r2<=m) dfs(,r1+r2,T+);
  48. if(m-r2>r1) dfs(r1-(m-r2),m,T+);
  49. dfs(r1,r2,T+);
  50. }
  51. if(i==) dfs(r1,r2,T+);
  52. }
  53. }
  54. int main()
  55. {
  56. freopen("cups.in","r",stdin);
  57. freopen("cups.out","w",stdout);
  58. read(n);
  59. read(m);
  60. read(t);
  61. read(d);
  62. if(t==)
  63. {
  64. printf("%d",min(abs(n-d),min(abs(m-d),d)));
  65. return ;
  66. }
  67. else ans=min(abs(n-d),min(abs(m-d),d)),dfs(,,);
  68. printf("%d",ans);
  69. return ;
  70. }

爆搜40分。

  1. //This program is designed by KHAOCE_Hydroge the member of the standing committee in Handong provincial committee.#include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <cstdio>
  6. #define N 101
  7. #define M 101
  8. #define D 201
  9. #define T 101
  10. using namespace std;
  11.  
  12. int dp[N][M][T];
  13. int n, m, t, d;
  14.  
  15. int dfs(int x, int y, int z) {
  16. if (dp[x][y][z] != 0x3f3f3f3f) return dp[x][y][z];
  17. if (z > t) {
  18. return dp[x][y][z] = abs(x + y - d);
  19. }
  20.  
  21. int xx = n - x;
  22. int yy = m - y;
  23. dp[x][y][z] = min(dp[x][y][z], dfs(n, y, z + ));
  24. dp[x][y][z] = min(dp[x][y][z], dfs(x, m, z + ));
  25. dp[x][y][z] = min(dp[x][y][z], dfs(, y, z + ));
  26. dp[x][y][z] = min(dp[x][y][z], dfs(x, , z + ));
  27. dp[x][y][z] = min(dp[x][y][z], dfs(x, y, z + ));
  28. if (x > yy)
  29. dp[x][y][z] = min(dp[x][y][z], dfs(x - yy, m, z + ));
  30. if (x < yy)
  31. dp[x][y][z] = min(dp[x][y][z], dfs(, y + x, z + ));
  32. if (y > xx)
  33. dp[x][y][z] = min(dp[x][y][z], dfs(n, y - xx, z + ));
  34. if (y < xx)
  35. dp[x][y][z] = min(dp[x][y][z], dfs(x + y, , z + ));
  36.  
  37. return dp[x][y][z];
  38.  
  39. }
  40.  
  41. int main() {
  42. freopen("cups.in", "r", stdin);
  43. freopen("cups.out", "w", stdout);
  44. memset(dp, 0x3f, sizeof dp);
  45. scanf("%d%d%d%d", &n, &m, &t, &d);
  46. dfs(, , );
  47. printf("%d", dp[][][]);
  48. return ;
  49. }

同班大佬的记忆化搜索

辣鸡

(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 机械键盘 蛤蛤)的更多相关文章

  1. 冲刺$\mathfrak{CSP-S}$集训模拟赛总结

    开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...

  2. Tickeys -- 找对打字的感觉 (机械键盘音效软件)

    最近发现公司里面越来越多人开始用机械键盘了,问了很多人为什么用机械键盘,主要有两种,一种是真的情怀,他们怀念十年前那种台式机硬邦邦的键盘,另外一种是因为喜欢机械键盘的声音,打字很爽.前者那真是没救了, ...

  3. mac下的改装人生——关于机械键盘

    这几天好像弄了很多关于机械键盘的东西,我自己的这块键盘也已经慢慢熟悉了,感觉打字超级爽哈,然后看了很多网上关于机械键盘的帖子,也看了很多教程,在Amazon和Taobao看了很多键盘的价位,前几天还试 ...

  4. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  5. 串门赛: NOIP2016模拟赛——By Marvolo 丢脸记

    前几天liu_runda来机房颓废,顺便扔给我们一个网址,说这上面有模拟赛,让我们感兴趣的去打一打.一开始还是没打算去看一下的,但是听std说好多人都打,想了一下,还是打一打吧,打着玩,然后就丢脸了. ...

  6. 模拟赛小结:2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    比赛链接:传送门 本场我们队过的题感觉算法都挺简单的,不知道为啥做的时候感觉没有很顺利. 封榜后7题,罚时1015.第一次模拟赛金,虽然是北欧的区域赛,但还是有点开心的. Problem B Best ...

  7. 模拟赛小结: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 ...

  8. 模拟赛小结: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 ...

  9. 普通键盘Windows上虚拟Cherry机械键盘效果的方法

    草台班子--普通键盘Windows上虚拟Cherry机械键盘效果的方法    ​ 机械键盘以其独特的手感.绚丽的外形,还有那人神共愤的音效吸引着大批爱好者.最近iQQO 3的机械键盘效果更是吸引了更多 ...

随机推荐

  1. Servlet8

    一.Annotation 进行配置不需要 web.xml 新建new Servlet 时,不需要在web.xml 文件中生成Servlet的相关信息 import java.io.IOExceptio ...

  2. HTTP传输二进制初探

    [转]HTTP传输二进制初探 http://www.51testing.com/?uid-390472-action-viewspace-itemid-233993 [转]HTTP传输二进制初探 上一 ...

  3. 主机与虚拟机互ping

    1.设置虚拟机网络连接方式(如下图): 2.设置主机和虚拟机的ip为同一个网段,如主机ip:192.168.28.1,虚拟机ip:192.168.28.128 3.如果相互还是ping不通,就检查一下 ...

  4. Java Socket传输数据的文件系统介绍

    转自:http://developer.51cto.com/art/201003/189963.htm Java Socket传输数据在进行的时候有很多的事情需要我们不断的进行有关代码的学习.只有不断 ...

  5. thinkphp不能够将ueditor中的html文本显示

    因为这个问题花费了我好长时间,非常的急躁.fuck!! 这次我首先在富文本框中输入了一些文本,这些文本是带有样式的,比如是代码.然后存入数据库,但是当我再一次将它取出来打算放入富文本框中的时候,马丹, ...

  6. CodeForces 730G Car Repair Shop (暴力)

    题意:给定 n 个工作的最好开始时间,和持续时间,现在有两种方法,第一种,如果当前的工作能够恰好在最好时间开始,那么就开始,第二种,如果不能,那么就从前找最小的时间点,来完成. 析:直接暴力,每次都先 ...

  7. idea打印gc日志

    1.在idea里添加配置 -XX:+PrintGCDetails 2.打印GC的详细信息: -XX:+PrintGCDetails 解释:打印GC详细信息. -XX:+PrintGCTimeStamp ...

  8. 在Visual studio 中解除 TFS 的账号绑定

    在Visual Studio中, 只要使用了TFS, 就会要求输入用户名密码验证 . 但是一旦点击验证对话框下部的:记住用户名密码 以后都不能再修改用户名了. 而且重装Visual Studio 听说 ...

  9. 51nod 1222 最小公倍数计数【莫比乌斯反演】

    参考:https://www.cnblogs.com/SilverNebula/p/7045199.html 所是反演其实反演作用不大,又是一道做起来感觉诡异的题 转成前缀和相减的形式 \[ \sum ...

  10. 实现strcmp功能

    判断两个字符串的大小 #include <stdio.h> int my_strcmp(const char *str1,const char *str2) { //判断两个字符串是否为空 ...