2019中山纪念中学夏令营-Day2[JZOJ]
博客的开始,先聊聊代码实现:
每次比赛以后,要有归纳错误的习惯.
错误小结:
1.读入:scanf(“%c”)会读入回车和空格,但cin不会.
2.对于二维数组的输入,不能把m,n搞混了,会引起严重的程序错误,轻则Wrong Answer,重则Run Time Error.
注意DFS的边界问题。
比赛内容及赛后反思
Problem 1
题目描述
近期,农场出现了D (1<= D <=15)种细菌。John 要从他的 N (1<= N <=1,000)头奶牛中尽可能多地选些产奶。但是如果选中的奶牛携带了超过 K (1<= K <=D)种不同细菌,所生产的奶就不合格。请你帮助John 计算出最多可以选择多少头奶牛。输入
第一行:三个整数 N, D, K下面N行:第行表示一头牛所携带的细菌情况。第一个整数 di 表示这头牛所携带的细菌种类数,后面di个整数表示这些细菌的各自种类标号。输出
只一个数 M,最大可选奶牛数。样例输入
样例输出
数据范围限制
提示
样例
输入 6 3 20
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 项目
作者: moreD, RD; 协力: twilight, McHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标
思路:暴搜。
代码:(TLE错误代码22.2分)
#include <cstdio>
#include <iostream>
#define rr register
using namespace std;
int n,d,k,a[][],ans1=,ans=;
bool c[];
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
void dfs(int i,bool xz,int jun,int sum)
{
bool tmp[],temp=jun;
for(rr int j=;j<=;j++)
tmp[j]=c[j];
if(jun>k)
return;
if(i>n)
{
ans=max(ans,sum);
return;
}
if(xz)
{
for(rr int j=;j<=k;j++)
if(a[i][j] && a[i][j]!=c[j])
{
c[j]=a[i][j];
jun++;
}
if(jun>k)
{
for(rr int j=;j<=;j++)
c[j]=tmp[j];
jun=temp;
}
else
sum++;
}
dfs(i+,true,jun,sum);
dfs(i+,false,jun,sum);
}
int main()
{
int tmp;
scanf("%d %d %d",&n,&d,&k);
for(rr int i=;i<=n;i++)
{
scanf("%d",&a[i][]);
if(a[i][]==)
{
ans1++;
i--;
n--;
}
if(a[i][]>k)
{
i--;
n--;
continue;
}
for(rr int j=;j<=a[i][];j++)
{
scanf("%d",&tmp);
a[i][tmp]=true;
}
}
dfs(,true,,);
dfs(,false,,);
printf("%d",ans);
}
正解以后附(本人还未提交测试代码)
Problem 2
题目描述
John的奶牛们计划要跳到月亮上去。它们请魔法师配制了 P (1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃。每种药水有一个“强度”值 s ( 1 <= s <= 500 ),表示可以增强牛的跳跃能力。然而,药力的作用却是交替相反方向起作用,也就是说:当第奇数次吃药时,牛获得跳的更高的能力,而第偶数吃药时,却降低了跳高能力。在吃药前,牛的跳高能力当然为 0 。每种药只能吃一次,开始时为第1次吃药。请求出牛可能跳到的最高高度--最大跳跃能力。输入
第一行:一个整数 P下面P行:每行一个整数,表示按先后次序要吃的药水的“强度”。输出
只一个整数,表示最大弹跳能力。样例输入
样例输出
数据范围限制
提示
输入 87
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 项目
作者: moreD, RD; 协力: twilight, McHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标
思路:动态规划。
附上代码:
(TLE错误代码20分DFS)
#include <cstdio>
#include <iostream>
#define rr register
using namespace std;
int p,a[],ans;
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
void dfs(rr int i,bool xz,bool zf,int sum)
{
if(i>p)
{
ans=max(ans,sum);
return;
}
if(xz)
{
if(zf)
sum+=a[i];
else
sum-=a[i];
zf=!zf;
}
dfs(i+,true,zf,sum);
dfs(i+,false,zf,sum);
}
int main()
{
scanf("%d",&p);
for(rr int i=;i<=p;i++)
scanf("%d",&a[i]);
dfs(,true,true,);
dfs(,false,true,);
printf("%d",ans);
}
正解(AC100分DP)
#include <cstdio>
#define rr register
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
int p,a[],f[][];
scanf("%d",&p);
for(rr int i=;i<=p;i++)
scanf("%d",&a[i]);
f[][]=a[];
for(rr int i=;i<=p;i++)
{
f[i][]=max(f[i-][]+a[i],f[i-][]);
f[i][]=max(f[i-][]-a[i],f[i-][]);
}
printf("%d",f[p][]);
}
Problem 3
题目描述
全球气候变暖,小镇A面临水灾。于是你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里。小镇可以认为是N * M的矩阵。矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之,表示该格子高度比较低。当前单元格的水可以流到上、下、左、右四个格子,但必须满足这些格子的高度是小于或者等于当前格子的高度。现在,给你一些N * M的矩阵,你至少要买多少个泵,才能把所有格子的水都能被抽走?
输入
多组测试数据。第一行:K,表示有K组测试数据。 1 <= K <= 5.接下来有K组测试数据,每组测试数据格式如下:第一行:两个正数, N , M . 1 <= N, M <= 50,表示小镇的大小。接下来有N行,每行有M个小写字母,表示小镇的地图。输出
共K行,每行对应一组数据。至少要买多少个泵,才能把所有格子的水都能抽走。
样例输入
样例输出
数据范围限制
提示
输入 25 5ccccccbbbccbabccbbbcccccc4 9cbabcbabccbabcbabccbabcbabccbabcbabc 111 11ccccccccccccaaaaaaaaaccaaaaaaaaaccaazpppzaaccaapdddpaaccaapdddpaaccaapdddpaaccaazpppzaaccaaaaaaaaaccaaaaaaaaacccccccccccc 输出 12 2服务器时间: Fri Aug 02 2019 18:32:45 GMT+0800 (中国标准时间)Fortuna OJ 项目
作者: moreD, RD; 协力: twilight, McHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标
思路:搜索(DFS,BFS均可)
代码实现:(DFS100分)
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int n,m;
char a[][];
bool bj[][];
int xi[]={,,-,};
int yi[]={,-,,};
void dfs(int x,int y)
{
bj[x][y]=true;
for(int i=;i<;i++)
{
int x1=x+xi[i];
int y1=y+yi[i];
if(x1<=n && x1> && y1<=m && y1> && bj[x1][y1]==false && a[x1][y1]>=a[x][y]){
dfs(x1,y1);
}
}}
int main()
{
int k=;
scanf("%d",&k);
while(k--)
{
memset(bj,false,sizeof bj);
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
cin>>a[i][j];
}
int ans=;
for(char c='a';c<='z';c++){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(bj[i][j]==false && a[i][j]==c)
{
dfs(i,j);
ans++;
}
}
}
}
printf("%d\n",ans);
}
}
Problem 4
1342. cowtract(网络) (Standard IO)
时间限制: 1000 ms 空间限制: 131072 KB 具体限制题目描述
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 81 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 项目
作者: moreD, RD; 协力: twilight, McHobby
由 CodeIgniter / Bootstrap 驱动
Glyphicons 提供图标
思路:最小生成树
代码实现:Unknow.
2019中山纪念中学夏令营-Day2[JZOJ]的更多相关文章
- 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解
2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms Memory Limits: 262144 KB Descrip ...
- 2019中山纪念中学夏令营-Day21[JZOJ]
2019中山纪念中学夏令营-Day21[JZOJ] 提高组(B组模拟赛)Team_B (由于本人太弱,并没有订正完题目) (题解大部分是从官方题解文件上摘来的) 日常膜拜大神:じやゆん蒟蒻 正文部分: ...
- 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)
Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...
- 2019中山纪念中学夏令营-Day12[JZOJ]
Begin (题目的排序方式:题号) 每期新姿势:(今天推荐一位巨佬)Cefola-Kiroxs 推荐知识:namespace的用法(本赛我的代码中将用到) 2019.08.12[NOIP普及组]模拟 ...
- 2019中山纪念中学夏令营-Day4[JZOJ]
Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...
- 2019中山纪念中学夏令营-Day1[JZOJ]
T1 题目描述: 1999. Wexley接苹果(apple) (File IO): input:apple.in output:apple.out 时间限制: 1000 ms 空间限制: 1280 ...
- 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】
Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...
- 2019中山纪念中学夏令营-Day19 数论初步【GCD(最大公约数),素数相关】
关于GCD的一些定理或运用的学习: 1. 2.二进制算法求GCD 思想:使得最后的GCD没有2(提前把2提出来) 代码实现: #include <cstdio> #define int l ...
- [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10
[小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...
随机推荐
- Tishreen-CPC 2018 G. Colors Overflow(分块)
Problem G. Colors Overflow Input file: standard input Output file: standard output Balloon Color: Da ...
- 微信小程序_(组件)可拖动movable-view
微信小程序movable-view组件官方文档 传送门 Learn 一.moveable-view组件 一.movable-view组件 direction:movable-view的移动方向,属性值 ...
- 使用yum安装nginx
在CentOS 7中安装Nginx. 当使用以下命令安装Nginx时,发现无法安装成功. 1 yum install -y nginx 需要做一点处理. 安装Nginx源 执行以下命令: 1 rpm ...
- python3 selenium使用
其实这个就相当于模拟人的点击事件来连续的访问浏览器.如果你玩过王者荣耀的话在2016年一月份的版本里面就有一个bug. 安卓手机下载一个按键精灵就可以在冒险模式里面设置按键,让手机自动玩闯关,一局19 ...
- [CSP-S模拟测试]:射手座之日(dsu on tree)
题目传送门(内部题103) 输入格式 第一行一个数$n$,表示结点的个数. 第二行$n–1$个数,第$i$个数是$p[i+1]$.$p[i]$表示结点$i$的父亲是$p[i]$.数据保证$p[i]&l ...
- C++ this指针的理解
先要理解class的意思.class应该理解为一种类型,象 int,char一样,是用户自定义的类型.虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型.用这个类型可以 ...
- FastAdmin 在 CRUD 时出现 exec() has been disabled for security reasons 处理方法
然后在看看 禁用函数列表(php.ini)disable_functions = proc_open, popen, exec, system, shell_exec, passthru 这里要把 e ...
- vscode如何使用命令面板
vscode如何使用命令面板 方法/步骤 首先找到vscode. 进入,打开页面. 找到查看. 打开找到命令面板. 选择打开,可以看到命令. 下拉还有多个,以及快捷键. ...
- python:科学计数法转化为浮点型数据
def as_num(x): y='{:.5f}'.format(x) # 5f表示保留5位小数点的float型 return(y) 实验一下 as_num(1.2e-4) In [3]:as_num ...
- PHP JSON数据 AJAX
JSON数据的定义方式 //写入数据 var a = { code:"p001", name:"张三", shuzu:new Array(1,2,3,4), j ...