Noip2019暑期训练2
|
题目名称 |
骑士遍历 |
和谐俱乐部 |
农场派对 |
对称二叉树 |
|
存盘文件名 |
knight |
Beautiful |
party |
tree |
|
输入文件名 |
knight.in |
Beautiful.in |
party.in |
tree.in |
|
输出文件名 |
knight.out |
Beautiful.out |
party.out |
tree.out |
|
时限 |
1s |
1s |
1s |
1s |
|
内存限制 |
128MB |
128MB |
128MB |
128MB |
题1:骑士遍历(knight)
【题目描述】
楚继光判断邪狼可能藏在一个n×n的(n≤10)正方形区域,楚继光骑着战马从任一点A(x,y)开始,试图找出一条路径,使马不重复地走遍区域的每一个点。马走的规则是走“日”字,可向任意方向走。
【输入格式】
三个整数n,x, y。n代表棋盘大小,x,y代表A点坐标,棋盘坐标从(0,0开始)。
【输出格式】
棋盘路径(搜索方向从最下方开始,依次逆时钟旋转)。
【输入样例】
5 2 0
【输出样例】
23 4 13 8 21
12 7 22 3 14
17 24 5 20 9
6 11 18 15 2
25 16 1 10 19
这道题肥肠简单,深搜AC,我的代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[][],n;
bool b[][];
int dx[]={,,,,-,-,-,-};//搜索是从{1,-2}开始的
int dy[]={-,-,,,,,-,-};//这里题目表述不清,但是增量一定要这样写!不然输出和答案不一
void search(int x,int y,int t)
{
if(t==n*n)
{
for(int j=n-;j>=;j--)
{
for(int i=;i<n;i++)
cout<<a[i][j]<<' ';
cout<<endl;
}
exit();//讲解的时候老师说这里最好不要用强制退出,容易出错,再定义一个bool变量判断是否有路径就可以啦
}
for(int i=;i<;i++)
{
int p=x+dx[i],q=y+dy[i];
if(p>=&&p<n&&q>=&&q<n&&!(b[p][q]))
{
b[p][q]=true;
a[p][q]=t+;
search(p,q,a[p][q]);
b[p][q]=false;
}
} }
int main()
{
//freopen("knight.in","r",stdin);(考试的时候一定记得这两行不要写错啦!!!)
//freopen("knight.out","w",stdout);(最好是一拿到题目就写,不怕一万就怕万一)
int x,y;cin>>n>>x>>y;
a[x][y]=;b[x][y]=true;
search(x,y,);
cout<<"-1";//本题数据有bug,会出现没有解决方案的情况,此时输出“-1”
return ;
}
题2:和谐俱乐部(Beautiful)
【题目描述】
“木秀于林,风必摧之;堆出于岸,流必湍之;行高于人,众必非之”,人类最可怕的罪之一,就是嫉妒。它生出许多最黑暗、污秽的罪行,使魔法世界的历史为之蒙羞。
魔法学院的某一个私人俱乐部有N个会员,每一个会员都是既美丽又强壮的,我们以A代表强壮,以B代表美丽。但他们都有一个缺点是嫉妒。例如i会员嫉妒j会员的条件是:Ai ≤ Aj并且Bi ≥ Bj,Ai ≥Aj并且Bi≤Bj,但是如果j会员的美丽和强壮都不如i会员,则i会员会忽视j会员的存在。而如果j会员的美丽和强壮都强于i会员的话,则i会员会非常尊敬j会员。
为了庆祝新年的到来,俱乐部经理准备组织一次舞会,但是他担心各会员之间由于嫉妒而引发争斗。所以,邀请哪些会员前来参加舞会实在是伤透了经理的脑筋。那么,精通电脑编程的你,能告诉经理发放邀请函最多人数是多少吗?
【输入格式】
第一行为整数N(2≤ N≤10000),代表N个会员。
剩下N行为每个会员的A值和B值。( 1≤ Ai,Bi ≤109 )
【输出格式】
一行为最大邀请人数。
【输入样例】
4
1 1
1 2
2 1
2 2
【输出样例】
2
这道题呢就是先排序,然后再求最长上升子序列(DP),没有一点技巧!只不过要仔细看题目:如果j会员的美丽和强壮 都 不如i会员,则i会员会忽视j会员的存在。而如果j会员的美丽和强壮 都 强于i会员的话,则i会员会非常尊敬j会员。我的修改后的代码(这道题一开始只得了部分分)如下:
#include<bits/stdc++.h>
using namespace std;
int n,mi;
struct node{
int a,b,l;
bool operator <(const node &y)const
{
return a<y.a;
}
}x[];
int main()
{
//freopen("Beautiful.in","r",stdin);
//freopen("Beautiful.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++)
{
cin>>x[i].a>>x[i].b;
x[i].l=;
}
sort(x+,x+n+);
for(int i=n-;i>=;i--)
{
mi=;
for(int j=i+;j<=n;j++)
{
if(x[i].b<x[j].b&&x[j].l>mi&&x[i].a<x[j].a)//一开始我没写x[i].a<x[j].a,因此错了两个点,所以说题目一定要看清楚!
{
mi=x[j].l;
}
}
x[i].l=mi+;
}
mi=x[].l;
for(int i=;i<=n;i++)
if(x[i].l>mi)mi=x[i].l;
cout<<mi;
return ;
}
题3:农场派对(party)
此题详情和代码请见↓↓↓
农场派对(party)(信息学奥赛一本通 1497) - endl\n - 博客园 https://www.cnblogs.com/ljy-endl/p/11285884.html
题4:对称二叉树(tree)
此题详情和代码请见↓↓↓
【18NOIP普及组】对称二叉树(信息学奥赛一本通 1981)(洛谷 5018) - endl\n - 博客园 https://www.cnblogs.com/ljy-endl/p/11281818.html
Noip2019暑期训练2的更多相关文章
- Noip2019暑期训练2 反思
经过两次测试,通过深刻的反思,我主要发现了以下易犯错误: 1.做题目时过于追求速度,导致好几处代码都出现手误打错的现象!而且,千万不要图快.图方便就复制粘贴,非常容易出错!(例如T3-party中直接 ...
- Noip2019暑期训练1
题目名称 时空定位 棋子移动 高精度乘法 数独游戏 存盘文件名 location piece mul sudoku 输入文件名 location.in piece.in mul.in sudoku.i ...
- [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10
[小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...
- ACM暑期训练总结
ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中 ...
- 「暑期训练」「基础DP」 Common Subsequence (POJ-1458)
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态 ...
- 牛客网2018暑期训练 第三场 a题
#include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...
- CSU-ACM2018暑期训练7-贪心
A:合并果子(贪心+优先队列) B:HDU 1789 Doing Homework again(非常经典的贪心) C:11572 - Unique Snowflakes(贪心,两指针滑动保存子段最大长 ...
- 「暑期训练」「基础DP」免费馅饼(HDU-1176)
题意与分析 中文题就不讲题意了.我是真的菜,菜出声. 不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置:二,所在的时间.还有吗?没有了,所以设dp[i][j]" role=" ...
- 7/31 CSU-ACM2018暑期训练7-贪心
比赛链接 A-CSU - 1588 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T ...
随机推荐
- (四) Docker 使用Let's Encrypt 部署 HTTPS
参考并感谢 周花卷 https://www.jianshu.com/p/5afc6bbeb28c 下载letsencrypt镜像(不带tag标签则表示下载latest版本) docker pull q ...
- python 基础(三)
tuple: 元组被定义后无法被修改 count(): #count(obj) 统计obj在元组中出现的次数 tup = (1,2,3,4,5,6,5,5,5,5,5,5,5) print(tup.c ...
- JS构造函数new的过程
造函数其实和普通函数本质上并无区别,唯一的区别有两个: 函数首字母大写,这个区别只是约定俗成的,便于区分.你实在要小写定义构造函数也完全没问题,所以这个区别可以忽略. 构造函数的调用需要用new操作符 ...
- layui 框架 table插件 实现键盘快捷键 切换单元格编辑
最近使用layui的框架时,发现table插件不支持键盘快捷键切换单元格,花了点时间实现此功能. 分享给有需要的朋友们~~~ 效果图 代码: 1.支持 enter,上,下,右键 切换单元格,支持隐藏列 ...
- 单词eschaunge交易所eschaunge交换
Exchange of one person or thing for another; reciprocal giving and receiving: (a) of prisoners of wa ...
- The Middle English word was Affrike非洲
Africa (n.) Latin Africa (terra) "African land, Libya, the Carthaginian territory, the province ...
- 深入理解JVM-java内存区域与内存溢出异常
1.内存模型概述 2.运行时数据区 2.1.程序计数器 理解: 1.什么是程序计数器 2.线程私有还是共享 引入难点: 理解什么是 native方法 简单地讲,一个Native Method就是一个j ...
- NAT实验
实验内容 实验拓扑 实验编址 实验步骤1.基础配置根据编址表配置,检测ping 2.配置静态NAT在公司网关路由器R1上配置访问外网的默认路由 由于内网使用的都是私有IP地址,员工无法直接访问公网 ...
- window安装gcc、g++、make等编译环境
1. MinGW官网下载:http://www.mingw.org 点击右上角Downloads 点击下载 mingw-get-setup.exe 2. 百度网盘(2019年4月从官网下 ...
- Linux必知必会--curl
你有多自律,你就能走多远~ --久节奏.慢读书 Curl命令 学习每个linux命令都该掌握man命令.(可以使用man命令去查看每个命令的使用说明) curl命令是一个利用URL规则在命令行下工作的 ...