Problem 1 抓牛(catchcow.cpp/c/pas)

【题目描述】

农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来.

他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.

那么,约翰需要多少时间抓住那只牛呢?

【输入格式】

仅有两个整数N和K

【输出格式】

最短时间

【样例输入】

5 17

【样例输出】

4

Problem 2 路面修整(grading.cpp/c/pas)

【题目描述】

FJ打算好好修一下农场中某条凹凸不平的土路。按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中。 整条路被分成了N段,N个整数A_1, ... , A_N (1 <= N <= 2,000)依次描述了每一段路的高度(0 <= A_i <= 1,000,000,000)。FJ希望找到一个恰好含N个元素的不上升或不下降序列B_1, ... , B_N,作为修过的路中每个路段的高度。由于将每一段路垫高或挖低一个单位的花费相同,修路的总支出可以表示为: |A_1 - B_1| + |A_2 - B_2| + ... + |A_N - B_N| 请你计算一下,FJ在这项工程上的最小支出是多少。FJ向你保证,这个支出不会超过2^31-1。【输入格式】
 第1行: 输入1个整数:N * 第2..N+1行: 第i+1行为1个整数:A_i

【输出格式】
第1行: 输出1个正整数,表示FJ把路修成高度不上升或高度不下降的最小花费

【样例输入】

7
1
3
2
4
5
3
9

【样例输出】

3

【样例解释】

FJ将第一个高度为3的路段的高度减少为2,将第二个高度为3的路段的高度增加到5,总花费为|2-3|+|5-3| = 3,并且各路段的高度为一个不下降序列 1,2,2,4,5,5,9。

Problem 3 教主的魔法(magic.cpp/c/pas)

【题目描述】

教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。

每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身高)

CYZ、光哥和ZJQ等人不信教主的邪,于是他们有时候会问WD闭区间 [L, R] 内有多少英雄身高大于等于C,以验证教主的魔法是否真的有效。

WD巨懒,于是他把这个回答的任务交给了你。

【输入格式】

第1行为两个整数N、Q。Q为问题数与教主的施法数总和。

第2行有N个正整数,第i个数代表第i个英雄的身高。

第3到第Q+2行每行有一个操作:

(1)若第一个字母为“M”,则紧接着有三个数字L、R、W。表示对闭区间 [L, R] 内所有英雄的身高加上W。

(2)若第一个字母为“A”,则紧接着有三个数字L、R、C。询问闭区间 [L, R] 内有多少英雄的身高大于等于C。

【输出格式】

对每个“A”询问输出一行,仅含一个整数,表示闭区间 [L, R] 内身高大于等于C的英雄数。

【样例输入】

5 3

1 2 3 4 5

A 1 5 4

M 3 5 1

A 1 5 4

【样例输出】

2

3

【数据范围】

【输入输出样例说明】

原先5个英雄身高为1、2、3、4、5,此时[1, 5]间有2个英雄的身高大于等于4。教主施法后变为1、2、4、5、6,此时[1, 5]间有3个英雄的身高大于等于4。

【数据范围】

对30%的数据,N≤1000,Q≤1000。

对100%的数据,N≤1000000,Q≤3000,1≤W≤1000,1≤C≤1,000,000,000

Problem 4 吃豆豆(pacman.cpp/c/pas)

【问题描述】

两个PACMAN吃豆豆。一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方。PACMAN走到豆豆处就会吃掉它。PACMAN行走的路线很奇怪,只能向右走或者向上走,他们行走的路线不可以相交。

请你帮这两个PACMAN计算一下,他们两加起来最多能吃掉多少豆豆。

【输入文件】

第一行为一个整数N,表示豆豆的数目。接下来N行,每行一对正整数Xi,Yi,表示第i个豆豆的坐标。任意两个豆豆的坐标都不会重合。

【输出文件】

仅有一行包含一个整数,即两个PACMAN加起来最多能吃掉的豆豆数量。

【输入样例】

8

8  1

1  5

5  7

2  2

7  8

4  6

3  3

6  4

【输出样例】

7

【数据规模】

对于30%的数据,1<=N<=25;

对于70%的数据,1<=N<=500;

对于100%的数据,1<=N<=2000,1<=Xi ,Yi <=200000  ;


T1:

宽搜妥妥的,注意queue数组开3倍

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define MAXN 100005
  6. using namespace std;
  7. int b[MAXN];
  8. int n,k;
  9. int qL[*MAXN],qM[*MAXN],L=,R;
  10. void bfs(){
  11. qL[++R]=n;
  12. qM[R]=;
  13. while(L<=R){
  14. int x=qL[L],p=qM[L];
  15. if(x==k){
  16. return;
  17. }
  18. L++;
  19. int dx=x+;
  20. if(<=dx&&dx<MAXN&&!b[dx]){
  21. b[dx]=p+;
  22. qL[++R]=dx;
  23. qM[R]=b[dx];
  24. }
  25. dx=x-;
  26. if(<=dx&&dx<MAXN&&!b[dx]){
  27. b[dx]=p+;
  28. qL[++R]=dx;
  29. qM[R]=b[dx];
  30. }
  31. dx=x*;
  32. if(<=dx&&dx<MAXN&&!b[dx]){
  33. b[dx]=p+;
  34. qL[++R]=dx;
  35. qM[R]=b[dx];
  36. }
  37. }
  38. }
  39. int main()
  40. {
  41. // freopen("data.in","r",stdin);
  42. scanf("%d%d",&n,&k);
  43. bfs();
  44. printf("%d\n",b[k]);
  45. return ;
  46. }

Code1


T2:

离散化+dp

将高度离散化,f[i][j]表示前i个路段解决,且最后一个路段高度为s[j]的状态(s[j]表示从小到大排序后第j个)

则有f[1][j]=Abs(s[j]-a[1])

f[i][j]=min{f[i-1][k] | 1<=k<=j } + Abs(s[j]-a[i])

把min记录下来边dp边更新O(1)

上面的方程是递增的,递减类似

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define MAXN 2005
  6. #define ll long long
  7. using namespace std;
  8. int a[MAXN];
  9. int s[MAXN];
  10. ll f[MAXN][MAXN];
  11. int n;
  12. int Abs(int x){
  13. return (x>)?x:-x;
  14. }
  15. int read(){
  16. int x=,f=;char ch=getchar();
  17. while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
  18. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  19. return x*f;
  20. }
  21. int main()
  22. {
  23. n=read();
  24. for(int i=;i<=n;i++){
  25. s[i]=a[i]=read();
  26. }
  27. sort(s+,s+n+);
  28. for(int i=;i<=n;i++){
  29. f[][i]=Abs(s[i]-a[]);
  30. }
  31. for(int i=;i<=n;i++){
  32. ll t=f[i-][];
  33. for(int j=;j<=n;j++){
  34. t=min(t,f[i-][j]);
  35. f[i][j]=t+Abs(s[j]-a[i]);
  36. }
  37. }
  38. ll ans=f[n][];
  39. for(int i=;i<=n;i++){
  40. ans=min(ans,f[n][i]);
  41. }
  42. // printf("%lld\n",ans);
  43. for(int i=;i<=n;i++){
  44. ll t=f[i-][n];
  45. for(int j=n;j>=;j--){
  46. t=min(t,f[i-][j]);
  47. f[i][j]=t+Abs(s[j]-a[i]);
  48. }
  49. }
  50. for(int i=;i<=n;i++){
  51. ans=min(ans,f[n][i]);
  52. }
  53. printf("%lld\n",ans);
  54. return ;
  55. }

Code2


T3:

平方分割

顺便写下注意事项:

1,桶中保存两个数组,一个是原数组,一个是排序后的数组,不可搞混了

2,对于第i个元素,相应的桶编号为i/L,相应桶中的编号为i%L,前提都是从0开始计算

3,对于处理,先讨论是不是在一个桶中,如果是一个桶直接L到R即可。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #define SIZE 1005
  7. #define MAXN 1000005
  8. #define ll long long
  9. using namespace std;
  10. struct Bucket{
  11. int len;
  12. ll a[SIZE];
  13. ll b[SIZE];
  14. ll tag;
  15. Bucket(){
  16. len=-;
  17. tag=;
  18. memset(a,,sizeof(a));
  19. memset(b,,sizeof(b));
  20. }
  21. void insert(ll x){
  22. a[++len]=x;
  23. }
  24. void update(){
  25. memcpy(b,a,sizeof(b));
  26. sort(b,b+len+);
  27. }
  28. void Left_Add(int L,ll x){
  29. for(int i=L;i<=len;i++){
  30. a[i]+=x;
  31. }
  32. update();
  33. }
  34. void Right_Add(int R,ll x){
  35. for(int i=;i<=R;i++){
  36. a[i]+=x;
  37. }
  38. update();
  39. }
  40. void Add(int L,int R,ll x){
  41. for(int i=L;i<=R;i++){
  42. a[i]+=x;
  43. }
  44. update();
  45. }
  46. void All_Add(ll x){
  47. tag+=x;
  48. }
  49. int Left_Ask(int L,ll x){
  50. x-=tag;
  51. int ret=;
  52. for(int i=L;i<=len;i++){
  53. if(a[i]>=x){
  54. ret++;
  55. }
  56. }
  57. return ret;
  58. }
  59. int Right_Ask(int R,ll x){
  60. x-=tag;
  61. int ret=;
  62. for(int i=;i<=R;i++){
  63. if(a[i]>=x){
  64. ret++;
  65. }
  66. }
  67. return ret;
  68. }
  69. int All_Ask(ll x){
  70. x-=tag;
  71. int Pos=lower_bound(b,b+len+,x)-b;
  72. return len-Pos+;
  73. }
  74. int Ask(int L,int R,ll x){
  75. tag-=x;
  76. int ret=;
  77. for(int i=L;i<=R;i++){
  78. if(a[i]>=x){
  79. ret++;
  80. }
  81. }
  82. return ret;
  83. }
  84. }S[SIZE];
  85. ll read(){
  86. ll x=,f=;char ch=getchar();
  87. while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
  88. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  89. return x*f;
  90. }
  91. int n,L;
  92. int pos[MAXN];
  93. int main()
  94. {
  95. // freopen("magic.in","r",stdin);
  96. // freopen("magic.out","w",stdout);
  97. int T;
  98. scanf("%d%d",&n,&T);
  99. L=sqrt(n);
  100. for(int i=;i<n;i++){
  101. ll t;
  102. scanf("%lld",&t);
  103. S[i/L].insert(t);
  104. pos[i]=i%L;
  105. }
  106. for(int i=;i<=(n-)/L;i++){
  107. S[i].update();
  108. }
  109. for(int i=;i<=T;i++){
  110. char ch[];
  111. int s,t;ll x;
  112. scanf("%s%d%d%lld",ch,&s,&t,&x);
  113. s--;t--;
  114. int sx=s/L,tx=t/L;
  115. if(sx!=tx){
  116. if('M'==ch[]){
  117. S[sx].Left_Add(pos[s],x);
  118. S[tx].Right_Add(pos[t],x);
  119. for(int j=sx+;j<tx;j++){
  120. S[j].All_Add(x);
  121. }
  122. }
  123. else{
  124. int ans=;
  125. ans+=S[sx].Left_Ask(pos[s],x);
  126. ans+=S[tx].Right_Ask(pos[t],x);
  127. for(int j=sx+;j<tx;j++){
  128. ans+=S[j].All_Ask(x);
  129. }
  130. printf("%d\n",ans);
  131. }
  132. }
  133. else{
  134. if('M'==ch[]){
  135. S[sx].Add(pos[s],pos[t],x);
  136. }
  137. else{
  138. int ans=;
  139. ans+=S[sx].Ask(pos[s],pos[t],x);
  140. printf("%d\n",ans);
  141. }
  142. }
  143. }
  144. return ;
  145. }

Code3


T4:

先玩个dp骗骗分 40分

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<ctime>
  6. #include<iostream>
  7. #define MAXN 205
  8. #define pii pair<int,int>
  9. using namespace std;
  10. int n;
  11. int X[MAXN],Y[MAXN];
  12. int S[MAXN][MAXN];
  13. int mx,my;
  14. int dp[MAXN+MAXN][MAXN][MAXN];
  15. int go[]={,-};
  16. pii a[MAXN];
  17. void LiSan(){
  18.  
  19. for(int i=;i<=n;i++){
  20. a[i]=make_pair(X[i],i);
  21. }
  22. sort(a+,a+n+);
  23. for(int i=;i<=n;i++){
  24. if(a[i-].first!=a[i].first) mx++;
  25. X[a[i].second]=mx;
  26. }
  27. for(int i=;i<=n;i++){
  28. a[i]=make_pair(Y[i],i);
  29. }
  30. sort(a+,a+n+);
  31. for(int i=;i<=n;i++){
  32. if(a[i-].first!=a[i].first) my++;
  33. Y[a[i].second]=my;
  34. }
  35. // for(int i=1;i<=n;i++){
  36. // printf("%d %d\n",X[i],Y[i]);
  37. // }
  38. for(int i=;i<=n;i++){
  39. S[X[i]][Y[i]]=;
  40. }
  41. }
  42. int read(){
  43. int x=,f=;char ch=getchar();
  44. while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
  45. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  46. return x*f;
  47. }
  48. int main()
  49. {
  50. // double begin,end;
  51. // begin=clock();
  52. // freopen("pacman1.in","r",stdin);
  53. // freopen("data.out","w",stdout);
  54. n=read();
  55. for(int i=;i<=n;i++){
  56. X[i]=read();
  57. Y[i]=read();
  58. }
  59. LiSan();
  60. // for(int i=1;i<=mx;i++){
  61. // for(int j=1;j<=my;j++){
  62. // printf("%d ",S[i][j]);
  63. // }
  64. // printf("\n");
  65. // }
  66. dp[][][]=S[][]+S[][]+S[][];
  67. for(int s=;s<=mx+my-;s++){
  68. for(int i=;i<=min(mx,s-);i++){
  69. for(int j=i+;j<=min(mx,s-);j++){
  70. for(int k=;k<;k++){
  71. int x1=i+go[k];
  72. int y1=s--x1;
  73. for(int l=;l<;l++){
  74. int x2=j+go[l];
  75. int y2=s--x2;
  76. if(x1==x2&&y1==y2){
  77. continue;
  78. }
  79. dp[s][i][j]=max(dp[s][i][j],dp[s-][x1][x2]);
  80. }
  81. }
  82. dp[s][i][j]+=S[i][s-i];
  83. dp[s][i][j]+=S[j][s-j];
  84. }
  85. }
  86. }
  87. printf("%d\n",dp[mx+my-][mx-][mx]+S[mx][my]);
  88. // end=clock();
  89. // printf("%f\n",(end-begin)/CLOCK_PER_SEC);
  90. return ;
  91. }

Code3

正解是费用流NOIP不考不管啦QAQ

NOIP2014-6-14模拟赛的更多相关文章

  1. 东方14模拟赛之noip2015/day1/3/神奇的幻方

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及 ...

  2. 2014.6.14模拟赛【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整

    Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...

  3. 2014.6.14模拟赛【bzoj1646】[Usaco2007 Open]Catch That Cow 抓住那只牛

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

  4. noip 2018.10.14 模拟赛 砍树

    数学问题... 根据题意,有: 移项,整理,得: 记 于是 那么 可以看到,最多只会有2*个取值(显而易见) 于是对应的,可能产生效果的d也只会有个,于是我们把他们找出来,扔进一个数组里然后排序,去重 ...

  5. 6.14 YZBOI模拟赛solution

    \(6.14\ YZBOI\)模拟赛\(solution\) 本来不想写题解来着...毕竟是自己找的题还是写一写吧 上午为了整活,就把赛制改成\(IOI\)赛制了,于是乎拯救了大家的\(70pts\) ...

  6. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  7. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  8. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  9. NOIP2018 模拟赛(二十二)雅礼NOI

    Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十 ...

  10. 7.29NOIP模拟赛

    7.29NOIP模拟赛 T1 YSG (1s,64MB,ysg.in,ysg.out) 描述 ysg,yxy,azw 三人正在刷题. 他们每做一题的时间都是一个有理数. 如果在某一时刻,三人同时做完一 ...

随机推荐

  1. LoadRunner录制手机APP教程

    1.     开启fiddler 2.     打开HP Virtual User Generator,新建->Web (HTTP/HTML)>创建 3.     点击开始录制: (1) ...

  2. Java并发编程实战 之 线程安全性

    1.什么是线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调用方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全 ...

  3. vue项目中的常见问题

    总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...

  4. redis入门(05)redis的key命令

    一.什么是redis键命令 Redis 键(key):Redis 键命令用于管理 redis 的键. Redis 键命令的基本语法: redis 127.0.0.1:6379> COMMAND ...

  5. GIT入门笔记(12)- 删除文件、提交删除和恢复删除

    在Git中,删除也是一个修改操作,我们实战一下, 1.先添加add一个新文件test.txt到Git并且提交commit到本地版本库: $ git add test.txt$ git commit - ...

  6. Linux探索之路1---CentOS入坑笔记整理

    前言 上次跟运维去行方安装行内环境,发现linux命令还是不是很熟练.特别是用户权限分配以及vi下的快捷操作.于是决定在本地安装一个CentOS虚拟机,后面有时间就每天学习一点Linux常用命令. 作 ...

  7. 前端之JavaScript内容

    一.JavaScript概述 1.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnv软件中),后将其改名ScriptEas ...

  8. Mysql变量列表

    变量表解释 (https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html)

  9. angularJs-route路由详解

    本篇基于ng-route来讲下angular中的路由,路由功能主要是 $routeProvider服务 与 ng-view 实现. ng-view的实现原理,是根据路由的切换,动态编译html模板-- ...

  10. bootstrap——bootstrap-table(1)

    前言: 特地纪念一下,自己参加这份工作刚好满一年.依旧乐在其中 言归正传:之前小接触过bootstrap,只是之后用得少了就生疏了,恰好现在的工作使用到了它,就再拿出来认真研究一下. 过程: 一直以来 ...