2018年NOIP普及组复赛题解
题目涉及算法:
- 标题统计:字符串入门题;
- 龙虎斗:数学题;
- 摆渡车:动态规划;
- 对称二叉树:搜索。
标题统计
题目链接:https://www.luogu.org/problem/P5015
这道题目是一道基础题,考察你字符(串)的输入。
实现代码如下:
#include <cstdio>
char c;
int cnt;
int main() {
while (c = getchar()) {
if (c == EOF || c == '\n') break;
if (c != ' ') cnt ++;
}
printf("%d\n", cnt);
return 0;
}
龙虎斗
题目链接:https://www.luogu.org/problem/P5016
这道题目是一道简单的数学推理题。
但是它有一些条件是可以化简的,比如“某一刻天降神兵,共有 \(s_1\) 位工兵突然出现在了 \(p_1\) 号兵营”这个条件,你是可以直接处理成一开始这 \(s_1\) 位工兵就出现在 \(p_1\) 位置的。
取出多余条件之后,实现的时候从左到右枚举一下势力和之差即可。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int n, m, p1, p2;
long long a[maxn], s1, s2, sum;
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) cin >> a[i];
cin >> m >> p1 >> s1 >> s2;
a[p1] += s1;
p2 = 1;
for (int i = 1; i <= n; i ++)
sum += ( (long long) (i - m) ) * a[i];
for (int i = 1; i <= n; i ++)
if ( abs(sum + (i-m) * s2) < abs(sum + (p2-m) * s2) ) p2 = i;
cout << p2 << endl;
return 0;
}
摆渡车
题目链接:
本题涉及算法:动态规划,有一丢丢贪心的思想。
我们令 \(f[i]\) 表示在时刻 \(i\) 发车时所有最晚在时刻 \(i\) 到站的人的最少等待时间,则:
\(f[i]\) 只跟范围在 \((i-2*m, i-m]\) 的 \(f[j]\) 有关,因为对于任意 \(i\) 来说:
\(f[i] \le f[i-m]\) (因为 \(i-m\) 时刻发车,我 \(i\) 又回来了)。
那么我令 \(tmp_{j,i}\) 表示时刻 \(j\) 开始到时刻 \(i\) 到站的人的总等待时长,则:
\(f[i] = \max(f[j]+tmp_{j,i})\) (其中 \(i-2 \times m \lt j \le i-m\) )。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 4000400;
int n, m, t, maxt;
long long f[maxn], cnt[maxn];
int main() {
cin >> n >> m;
for (int i = 0; i < n; i ++) {
cin >> t;
cnt[t] ++;
if (t > maxt) maxt = t;
}
for (int i = 0; i <= maxt + m; i ++) {
long long tmp = 0;
for (int j = 0; j < m && i-j >=0; j ++) {
tmp += cnt[i-j] * ( (long long) j );
}
f[i] = tmp;
if (i >= m) f[i] += f[i-m];
for (int j = m+1; j <= 2*m && i - j >= 0; j ++) {
tmp += cnt[i-j+1] * ( (long long) (j-1) );
if (f[i-j] + tmp <= f[i]) f[i] = f[i-j] + tmp;
}
}
long long ans = f[maxt];
for (int i = 1; i <= m; i ++) {
ans = min(ans, f[maxt+i]);
}
cout << ans << endl;
return 0;
}
对称二叉树
题目链接:https://www.luogu.org/problem/P5018
这道题目用搜索竟然过了。
表示这样的话最坏情况下时间复杂度应该有 \(O(n^2)\) 囧、
另说标准解法应该是树hash,有时间了解一下。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 4000400;
int n, m, t, maxt;
long long f[maxn], cnt[maxn];
int main() {
cin >> n >> m;
for (int i = 0; i < n; i ++) {
cin >> t;
cnt[t] ++;
if (t > maxt) maxt = t;
}
for (int i = 0; i <= maxt + m; i ++) {
long long tmp = 0;
for (int j = 0; j < m && i-j >=0; j ++) {
tmp += cnt[i-j] * ( (long long) j );
}
f[i] = tmp;
if (i >= m) f[i] += f[i-m];
for (int j = m+1; j <= 2*m && i - j >= 0; j ++) {
tmp += cnt[i-j+1] * ( (long long) (j-1) );
if (f[i-j] + tmp <= f[i]) f[i] = f[i-j] + tmp;
}
}
long long ans = f[maxt];
for (int i = 1; i <= m; i ++) {
ans = min(ans, f[maxt+i]);
}
cout << ans << endl;
return 0;
}
2018年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 循环 ...
- 2015年NOIP普及组复赛题解
题目涉及算法: 金币:入门题: 扫雷游戏:入门题: 求和:简单数学推导: 推销员:贪心. 金币 题目链接:https://www.luogu.org/problem/P2669 入门题,直接开一个循环 ...
随机推荐
- VUE.之安装 font-awesome
VUE.之安装 font-awesome 我们在项目中经常使用各种图标:font-awesome (http://fontawesome.dashgame.com/) 1.npm 安装font-awe ...
- Django用户名密码错误提示
from django.shortcuts import render # Create your views here. from django.shortcuts import render fr ...
- sql server 创建视图添加表时出现从其他数据库导入的表未显示出来
创建视图添加表时出现从其他数据库导入的表未显示出来,通过数据库刷新,也不能解决.关闭SQL server management studio 后,再次进入,在创建视图的时候添加表的列表就出现了新导入的 ...
- 高维护性的javascript
养成良好的编码习惯,提高代码的可维护性 避免定义全局变量或函数 定义全局的变量和函数,会影响代码的可维护性.如果在页面中运行的javascript 代码是在相同的作用域里面,那就可能代码之间存在互相影 ...
- LintCode刷题笔记-- InterLeaving
标签: 动态规划 解题思路 1. 这道题最重要的是,存在三个字符串,但是并不需要两个二维矩阵来进行解,因为可以使用i+j-1来代表s3的下标,这样就可以通过i和j来遍历s3了.因为对于任何一个合法的交 ...
- PCL配置即常见问题
1 下载 把与VS版本对应PCL的AllInOne包下载下来.要下对安装包,需要了解安装包的命名的含义,以下面的一个AllInOne包的名字为例. PCL-1.8.0-AllInOne-msvc ...
- FastAdmin 使用 phpmail 出现 spl_autoload_register 错误
FastAdmin 使用 phpmail 出现 spl_autoload_register 错误 现象 意思是 __autoload() 已经废弃 问题来源于:https://ask.fastadmi ...
- Gatling初次体验
主要步骤: 1. 利用springboot编写了一个简单的服务jdktest 2.将jdktest利用docker在虚拟机中启动 3.创建一个scala工程,利用gatling提供的DSL编写性能脚本 ...
- R语言均值,中位数和模式
R语言均值,中位数和模式 在R统计分析是通过用许多内置函数来执行的. 大多数这些函数是R基本包的一部分.这些函数需要R向量作为输入参数并给出结果. 我们正在讨论本章中的函数是平均数,中位数和模式. 平 ...
- PAT天梯赛L3-011 直捣黄龙
题目链接:点击打开链接 本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求 ...