2004年NOIP普及组复赛题解
题目涉及算法:
- 不高兴的津津:入门题;
- 花生采摘:贪心;
- FBI树:递归、DP求区间和;
- 火星人:模拟。
不高兴的津津
题目链接:
简单枚举。
遍历一遍,找到 \(a[i] + b[i]\) 最大的那个坐标即可。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[8], b[8], id;
int main() {
for (int i = 1; i <= 7; i ++) {
cin >> a[i] >> b[i];
if (a[i] + b[i] > 8 && (!id || a[i]+b[i] > a[id]+b[id]))
id = i;
}
cout << id << endl;
return 0;
}
花生采摘
题目链接:https://www.luogu.org/problem/P1086
贪心。
这里告诉我们一个条件是“假设这些植株下的花生个数各不相同”,所以我们可以直接按照花生个数从大到小进行排列,但是每一个元素同时需要记录他的行号、列号和花生个数。
对于排好序的元素,从路边到第 \(0\) 棵植株(假设坐标从 \(0\) 开始)的时间是确定的,就是第 \(0\) 棵植株的行号,采摘好第 \(n-1\) 棵植株之后回到路边的时间也是可以确定的,就是 \(1\) ;
而从第 \(i\) 棵植株到第 \(i+1\) 棵植株的时间有两种过渡方式:
- 从第 \(i\) 棵植株直接走到第 \(i+1\) 棵植株并采摘,花费的时间是 \(|x_i-x_{i+1}| + |y_i+y_{i+1}| + 1\) (这里,\(x_i\) 表示第 \(i\) 棵植株的行号,\(y_i\) 表示第 \(i\) 棵植株的列号, \(|a|\) 表示 \(a\) 的绝对值);
- 从第 \(i\) 棵植株跳回路边,然后再从路边走到第 \(i+1\) 棵植株,并采摘,花费的时间是 \(x_i + x_{i+1} + 1\) 。
而我应该取两者的较小值。\(\Rightarrow\) 这就是此题贪心的精髓。
后来我发现我想多了,这个题目是假设猴子在取花生的过程中不会回到大路上的,有些同学在思考是否可能在中间回到大路上,因为题目没说在大路上移动要花时间,所以有可能中途出来再进去摘的花生更多。
所以我们只考虑上述第2个条件就可以了~
然后这里有一个限定时间 \(K\) ,我们只需要确定在限定时间内能够以上述方案摘多少株就可以了。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 440;
struct Node {
int x, y, z;
} a[maxn];
int n, m, k, cnt, dis, ans;
bool cmp(Node a, Node b) {
return a.z > b.z;
}
int main() {
cin >> n >> m >> k;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
a[cnt].x = i;
a[cnt].y = j;
cin >> a[cnt].z;
if (a[cnt].z) cnt ++;
}
}
sort(a, a+cnt, cmp);
for (int i = 0; i < cnt; i ++) {
if (!i) dis += a[i].x + 1;
// else dis += min( abs(a[i].x-a[i-1].x) + abs(a[i].y-a[i-1].y), a[i-1].x + a[i].x ) + 1;
else dis += abs(a[i].x - a[i-1].x) + abs(a[i].y - a[i-1].y) + 1;
if (dis + a[i].x <= k) ans += a[i].z;
}
cout << ans << endl;
return 0;
}
FBI树
题目链接:https://www.luogu.org/problem/P1087
这道题目就是用递归实现区间遍历。
我可以使用动态规划来实现区间和,然后递归,或者套线段树模板。
这里仅介绍使用使用动态规划+递归实现,代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = (1<<10|1);
char ch[maxn+10];
int tree[maxn<<2], n, m, sum[maxn];
void solve(int L, int R, int n) {
if (n) {
solve(L, L+(1<<(n-1))-1, n-1);
solve(L+(1<<(n-1)), R, n-1);
}
int tmp = sum[R] - sum[L-1];
if (tmp == (1<<n)) putchar('I');
else if (!tmp) putchar('B');
else putchar('F');
}
int main() {
scanf("%d%s", &n, ch+1);
m = (1<<n);
for (int i = 1; i <= m; i ++)
sum[i] = sum[i-1] + (ch[i] == '1');
solve(1, m, n);
return 0;
}
火星人
题目链接:https://www.luogu.org/problem/P1088
这道题目是一道模拟,模拟下一个全排列。
但是STL提供了 next_permutation 函数,我就直接拿来用了。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int n, m, a[maxn];
int main() {
cin >> n >> m;
for (int i = 0; i < n; i ++) cin >> a[i];
while (m --) next_permutation(a, a+n);
for (int i = 0; i < n; i ++) {
if (i) putchar(' ');
cout << a[i];
}
cout << endl;
return 0;
}
作者:zifeiy
2004年NOIP普及组复赛题解的更多相关文章
- 2010年NOIP普及组复赛题解
题目及涉及的算法: 数字统计:入门题: 接水问题:基础模拟题: 导弹拦截:动态规划.贪心: 三国游戏:贪心.博弈论. 数字统计 题目链接:洛谷 P1179 这道题目是一道基础题. 我们只需要开一个变量 ...
- 2017年NOIP普及组复赛题解
题目涉及算法: 成绩:入门题: 图书管理员:模拟: 棋盘:最短路/广搜: 跳房子:RMQ/二分答案/DP(本人解法). 成绩 题目链接:https://www.luogu.org/problemnew ...
- 2016年NOIP普及组复赛题解
题目涉及算法: 买铅笔:入门题: 回文日期:枚举: 海港:双指针: 魔法阵:数学推理. 买铅笔 题目链接:https://www.luogu.org/problem/P1909 设至少要买 \(num ...
- 2014年NOIP普及组复赛题解
题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...
- 2013年NOIP普及组复赛题解
题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...
- 2011年NOIP普及组复赛题解
题目涉及算法: 数字反转:模拟: 统计单词数:模拟: 瑞士轮:模拟/排序: 表达式的值:后缀表达式/DP. 数字反转 题目链接:https://www.luogu.org/problem/P1307 ...
- 2008年NOIP普及组复赛题解
题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...
- 2005年NOIP普及组复赛题解
题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...
- 2018年NOIP普及组复赛题解
题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...
随机推荐
- org.apache.jasper.JasperException: xxxx.jsp(118,24) Attribute style invalid for tag formatNumber according to TLD
错误:org.apache.jasper.JasperException: /projm/projBudgetChangeOverview.jsp(118,24) Attribute style in ...
- WPF学习(8)数据绑定 https://www.cnblogs.com/jellochen/p/3541197.html
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- CSS的盒子模型(Box Model)
盒子模型(Box Model)是 CSS 的核心,现代 Web 布局设计简单说就是一堆盒子的排列与嵌套,掌握了盒子模型与它们的摆放控制,会发现再复杂的页面也不过如此. 然而,任何美好的事物都有缺憾,盒 ...
- golang中包的初始化
1.当一个go源程序被初始化时,首先去初始化所依赖的其他包,然后初始化该go源码文件的全局变量的初始化和执行初始化函数,其中该包所有的全局变量初始化在前,该包的初始化函数int在后.当所有包的初始化函 ...
- ie8 下margin-top失效的小案例
一个小案例,是关于IE8下的margin-top的失效问题,巨日代码如下: 正常的chrome浏览器下的显示如下: margin-top=10px,正常显示 但是在ie8下,最终样式如下: margi ...
- 【JZOJ4964】【GDKOI2017模拟1.21】Rhyme
hafy 由于多次交换邮票没有满足所有人的需求,小Z被赶出了集邮部.无处可去的小Z决定加入音乐部,为了让音乐部的人注意到自己的才华,小Z想写一首曲子.为了让自己的曲子更好听,小Z找到了一些好听曲子作为 ...
- 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程(一)(2019-08-23)
目录 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程 安装前准备 安装 ESP8266 工具链 下载 ESP8266 SDK 编译 花絮 使用 Windo ...
- 解决VS+Qt不生成moc文件问题
使用VS的Qt插件进行Qt开发时,有时候会遇到不能生成moc文件的问题. 1.在工程中可以看到这个Generated files目录下是有一个看似moc文件的文件,双击打开的话: 如果能正常打开,文件 ...
- hdu2176 尼姆博弈
如果 a1^a2^a3........^an=0,必败态. 如果 a1^a2^a3........^an!=0,必胜态. 对于必胜态,若a1^a2^a3........^an=k,要让对方为必败态,所 ...
- oracle copy
用法: COPY FROM <db> TO <db> <opt> <table> {(<cols>)} USING <sel> ...