博客的开始,先聊聊代码实现:

每次比赛以后,要有归纳错误的习惯.

错误小结:

1.读入:scanf(“%c”)会读入回车和空格,但cin不会.

2.对于二维数组的输入,不能把m,n搞混了,会引起严重的程序错误,轻则Wrong Answer,重则Run Time Error.

注意DFS的边界问题。

比赛内容及赛后反思

Problem 1

1339. disease(细菌) (Standard IO)

时间限制: 1000 ms  空间限制: 131072 KB  具体限制  

Goto ProblemSet

题目描述

  近期,农场出现了D (1<= D <=15)种细菌。John 要从他的 N (1<= N <=1,000)头奶牛中尽可能多地选些产奶。但是如果选中的奶牛携带了超过 K (1<= K <=D)种不同细菌,所生产的奶就不合格。请你帮助John 计算出最多可以选择多少头奶牛。
 

输入

第一行:三个整数 N, D, K
下面N行:第行表示一头牛所携带的细菌情况。第一个整数 di 表示这头牛所携带的细菌种类数,后面di个整数表示这些细菌的各自种类标号。

输出

只一个数 M,最大可选奶牛数。
 

样例输入

 

样例输出

 
 

数据范围限制

 
 

提示

样例

输入  

6 3 2

0

1 1

1 2

1 3

2 2 1

2 2 1

选择:
1,2,3,5,6
只有1#和2#两种细菌

输出

5

    
 
 
 
 
 
服务器时间: Fri Aug 02 2019 18:22:07 GMT+0800 (中国标准时间)Fortuna OJ 项目
作者: moreDRD; 协力: twilightMcHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标

思路:暴搜。

代码:(TLE错误代码22.2分)

  1. #include <cstdio>
  2. #include <iostream>
  3. #define rr register
  4. using namespace std;
  5. int n,d,k,a[][],ans1=,ans=;
  6. bool c[];
  7. int max(int a,int b)
  8. {
  9. if(a>b)
  10. return a;
  11. return b;
  12. }
  13. void dfs(int i,bool xz,int jun,int sum)
  14. {
  15. bool tmp[],temp=jun;
  16. for(rr int j=;j<=;j++)
  17. tmp[j]=c[j];
  18. if(jun>k)
  19. return;
  20. if(i>n)
  21. {
  22. ans=max(ans,sum);
  23. return;
  24. }
  25. if(xz)
  26. {
  27. for(rr int j=;j<=k;j++)
  28. if(a[i][j] && a[i][j]!=c[j])
  29. {
  30. c[j]=a[i][j];
  31. jun++;
  32. }
  33. if(jun>k)
  34. {
  35. for(rr int j=;j<=;j++)
  36. c[j]=tmp[j];
  37. jun=temp;
  38. }
  39. else
  40. sum++;
  41. }
  42. dfs(i+,true,jun,sum);
  43. dfs(i+,false,jun,sum);
  44. }
  45. int main()
  46. {
  47. int tmp;
  48. scanf("%d %d %d",&n,&d,&k);
  49. for(rr int i=;i<=n;i++)
  50. {
  51. scanf("%d",&a[i][]);
  52. if(a[i][]==)
  53. {
  54. ans1++;
  55. i--;
  56. n--;
  57. }
  58. if(a[i][]>k)
  59. {
  60. i--;
  61. n--;
  62. continue;
  63. }
  64. for(rr int j=;j<=a[i][];j++)
  65. {
  66. scanf("%d",&tmp);
  67. a[i][tmp]=true;
  68. }
  69. }
  70. dfs(,true,,);
  71. dfs(,false,,);
  72. printf("%d",ans);
  73. }

正解以后附(本人还未提交测试代码)

Problem 2

1340. jumpcow(牛跳) (Standard IO)

时间限制: 1000 ms  空间限制: 131072 KB  具体限制  

Goto ProblemSet

题目描述

  John的奶牛们计划要跳到月亮上去。它们请魔法师配制了 P (1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃。每种药水有一个“强度”值 s ( 1 <= s <= 500 ),表示可以增强牛的跳跃能力。然而,药力的作用却是交替相反方向起作用,也就是说:当第奇数次吃药时,牛获得跳的更高的能力,而第偶数吃药时,却降低了跳高能力。在吃药前,牛的跳高能力当然为 0 。
   每种药只能吃一次,开始时为第1次吃药。
   请求出牛可能跳到的最高高度--最大跳跃能力。
 
 

输入

第一行:一个整数 P
下面P行:每行一个整数,表示按先后次序要吃的药水的“强度”。

输出

只一个整数,表示最大弹跳能力。
 

样例输入

 

样例输出

 
 

数据范围限制

 
 

提示

输入

8

7

2

1

8

4

3

5

6

去掉第2、4两种药水,
吃药为:
7,1,8,3,6;
最终能力为:
7-1+8-3+6=17

输出

17

    
 
 
 
 
服务器时间: Fri Aug 02 2019 18:27:32 GMT+0800 (中国标准时间)Fortuna OJ 项目
作者: moreDRD; 协力: twilightMcHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标

思路:动态规划。

附上代码:

(TLE错误代码20分DFS)

  1. #include <cstdio>
  2. #include <iostream>
  3. #define rr register
  4. using namespace std;
  5. int p,a[],ans;
  6. int max(int a,int b)
  7. {
  8. if(a>b)
  9. return a;
  10. return b;
  11. }
  12. void dfs(rr int i,bool xz,bool zf,int sum)
  13. {
  14. if(i>p)
  15. {
  16. ans=max(ans,sum);
  17. return;
  18. }
  19. if(xz)
  20. {
  21. if(zf)
  22. sum+=a[i];
  23. else
  24. sum-=a[i];
  25. zf=!zf;
  26. }
  27. dfs(i+,true,zf,sum);
  28. dfs(i+,false,zf,sum);
  29. }
  30. int main()
  31. {
  32. scanf("%d",&p);
  33. for(rr int i=;i<=p;i++)
  34. scanf("%d",&a[i]);
  35. dfs(,true,true,);
  36. dfs(,false,true,);
  37. printf("%d",ans);
  38. }

正解(AC100分DP)

  1. #include <cstdio>
  2. #define rr register
  3. int max(int a,int b)
  4. {
  5. if(a>b)
  6. return a;
  7. return b;
  8. }
  9. int main()
  10. {
  11. int p,a[],f[][];
  12. scanf("%d",&p);
  13. for(rr int i=;i<=p;i++)
  14. scanf("%d",&a[i]);
  15. f[][]=a[];
  16. for(rr int i=;i<=p;i++)
  17. {
  18. f[i][]=max(f[i-][]+a[i],f[i-][]);
  19. f[i][]=max(f[i-][]-a[i],f[i-][]);
  20. }
  21. printf("%d",f[p][]);
  22. }

Problem 3

1341. water(水流) (Standard IO)

时间限制: 1000 ms  空间限制: 131072 KB  具体限制  

Goto ProblemSet

题目描述

全球气候变暖,小镇A面临水灾。于是你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里。小镇可以认为是N * M的矩阵。矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之,表示该格子高度比较低。当前单元格的水可以流到上、下、左、右四个格子,但必须满足这些格子的高度是小于或者等于当前格子的高度。现在,给你一些N * M的矩阵,你至少要买多少个泵,才能把所有格子的水都能被抽走?

 

输入

 多组测试数据。
 第一行:K,表示有K组测试数据。 1 <= K <= 5.
 接下来有K组测试数据,每组测试数据格式如下:
     第一行:两个正数, N , M . 1 <= N, M <= 50,表示小镇的大小。
     接下来有N行,每行有M个小写字母,表示小镇的地图。

输出

共K行,每行对应一组数据。至少要买多少个泵,才能把所有格子的水都能抽走。

 

样例输入

 

样例输出

 
 

数据范围限制

 
 

提示

输入  

2
 5 5
 ccccc
 cbbbc
 cbabc
 cbbbc
 ccccc
 4 9
 cbabcbabc
 cbabcbabc
 cbabcbabc
 cbabcbabc

1
 11   11
 ccccccccccc
 caaaaaaaaac
 caaaaaaaaac
 caazpppzaac
 caapdddpaac
 caapdddpaac
 caapdddpaac
 caazpppzaac
 caaaaaaaaac
 caaaaaaaaac
 ccccccccccc

输出

1
2

 2
 
 
 
 
服务器时间: Fri Aug 02 2019 18:32:45 GMT+0800 (中国标准时间)Fortuna OJ 项目
作者: moreDRD; 协力: twilightMcHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标

思路:搜索(DFS,BFS均可)

代码实现:(DFS100分)

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cstring>
  4. using namespace std;
  5. int n,m;
  6. char a[][];
  7. bool bj[][];
  8. int xi[]={,,-,};
  9. int yi[]={,-,,};
  10. void dfs(int x,int y)
  11. {
  12. bj[x][y]=true;
  13. for(int i=;i<;i++)
  14. {
  15. int x1=x+xi[i];
  16. int y1=y+yi[i];
  17. if(x1<=n && x1> && y1<=m && y1> && bj[x1][y1]==false && a[x1][y1]>=a[x][y]){
  18. dfs(x1,y1);
  19. }
  20. }}
  21. int main()
  22. {
  23. int k=;
  24. scanf("%d",&k);
  25. while(k--)
  26. {
  27. memset(bj,false,sizeof bj);
  28. scanf("%d %d",&n,&m);
  29. for(int i=;i<=n;i++)
  30. {
  31. for(int j=;j<=m;j++)
  32. cin>>a[i][j];
  33. }
  34. int ans=;
  35. for(char c='a';c<='z';c++){
  36. for(int i=;i<=n;i++){
  37. for(int j=;j<=m;j++){
  38. if(bj[i][j]==false && a[i][j]==c)
  39. {
  40. dfs(i,j);
  41. ans++;
  42. }
  43. }
  44. }
  45. }
  46. printf("%d\n",ans);
  47. }
  48. }

Problem 4

1342. cowtract(网络) (Standard IO)

时间限制: 1000 ms  空间限制: 131072 KB  具体限制  

Goto ProblemSet

题目描述

  Bessie受雇来到John的农场帮他们建立internet网络。农场有 N (2<= N <= 1,000)牛棚,编号为1..N。John之前已经勘测过,发现有 M (1<= M <= 20,000)条可能的连接线路,一条线路是连接某两个牛棚的。每条可能的线路都有一个建设费用 C (1<= C <=100,000)。John当然想花尽量少的钱,甚至克扣Bessie的工钱。
  Bessie发现了这点,很生气,决定给John捣乱。她要选择一些线路组成网,但费用却尽可能大。当然网络要能正常工作,也就是任意两个牛棚之间都是相互可以连通的,并且网络上不能有环,不然John会很容易发现的。
 请计算组建这种网络最多可能的费用。
 

输入

第一行:两个整数 N M
下面M行:每行3个整数 A,B,C。表示一个可能的线路要连接A、B两个牛棚,费用是C。

输出

只一行,一个整数,即花费最大的费用。如果不可能连接通所有牛棚,输出-1。
 

样例输入

 

样例输出

 
 

数据范围限制

 
 

提示

输入

5 8

1 2 3

1 3 7

2 3 10

2 4 4

2 5 8

3 4 6

3 5 2

4 5 17

17 + 8 + 10 + 7 = 42

输出

42

 
 
 
 
 
服务器时间: Fri Aug 02 2019 18:37:34 GMT+0800 (中国标准时间)Fortuna OJ 项目
作者: moreDRD; 协力: twilightMcHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标

思路:最小生成树

代码实现:Unknow.

2019中山纪念中学夏令营-Day2[JZOJ]的更多相关文章

  1. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  2. 2019中山纪念中学夏令营-Day21[JZOJ]

    2019中山纪念中学夏令营-Day21[JZOJ] 提高组(B组模拟赛)Team_B (由于本人太弱,并没有订正完题目) (题解大部分是从官方题解文件上摘来的) 日常膜拜大神:じやゆん蒟蒻 正文部分: ...

  3. 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)

    Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...

  4. 2019中山纪念中学夏令营-Day12[JZOJ]

    Begin (题目的排序方式:题号) 每期新姿势:(今天推荐一位巨佬)Cefola-Kiroxs 推荐知识:namespace的用法(本赛我的代码中将用到) 2019.08.12[NOIP普及组]模拟 ...

  5. 2019中山纪念中学夏令营-Day4[JZOJ]

    Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...

  6. 2019中山纪念中学夏令营-Day1[JZOJ]

    T1 题目描述: 1999. Wexley接苹果(apple) (File IO): input:apple.in output:apple.out 时间限制: 1000 ms  空间限制: 1280 ...

  7. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

  8. 2019中山纪念中学夏令营-Day19 数论初步【GCD(最大公约数),素数相关】

    关于GCD的一些定理或运用的学习: 1. 2.二进制算法求GCD 思想:使得最后的GCD没有2(提前把2提出来) 代码实现: #include <cstdio> #define int l ...

  9. [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10

    [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...

随机推荐

  1. fflush函数

    /*** flush.c ***/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main ...

  2. react搭建项目

    1.创建react项目 使用react脚手架create-react-app npm install -g create-react-app create-react-app my-app cd my ...

  3. JavaWeb_(Hibernate框架)Hibernate中创建实体

    Hibernate中创建实体 创建实体五个基本规则 --提供无参的构造器 --成员变量的私有化,提供get.set方法,提供属性 --尽量使用包装类型 --主键(一定要有) --不要加final(hi ...

  4. 修改hive 默认fs为s3 遇到的坑

    问题: hive我修改了 默认的f <property> <name>fs.defaultFS</name> <value>hdfs://...:802 ...

  5. Linux 变量 $$ $! $? $- $# $* $@ $0 $n

    [参考文章]:linux中shell变量$#,$@,$0,$1,$2的含义解释 1. 变量说明 1.1 $$ Shell本身的PID(ProcessID) 1.2 $! Shell最后运行的后台Pro ...

  6. (八)C语言之printf

  7. mysql删除数据库所有表

    -- 生成删除xxx数据库的所有表的sql语句SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` ...

  8. ccf 201703-4 地铁修建(95)(并查集)

    ccf 201703-4 地铁修建(95) 使用并查集,将路径按照耗时升序排列,依次加入路径,直到1和n连通,这时加入的最后一条路径,就是所需要修建的时间最长的路径. #include<iost ...

  9. springboot三种配置文件上传下载大小的配置

    配置文件为application.yml格式: spring: http: multipart: enabled: true max-file-size: 30MB max-request-size: ...

  10. GitHub:Baidu

    ylbtech-GitHub:Baidu 1.返回顶部 · duedge-recipes DuEdge百度边缘网络计算样例代码 edgeedge-computingduedge    JavaScri ...