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 入门题,直接开一个循环 ...
随机推荐
- 考试总结 模拟28(W)
心得: 状态极差,都怪放假,上一套的T3没改完,今天考试没有一点状态,开学恐惧症.(不恐惧作业或一调但还是很茫然) T1能A掉实在是意外,杂题T1没做过,可能是人品守恒,(丢了钱今天才发现以后一定锁柜 ...
- 【linux配置】虚拟机配置静态IP地址
使用VMware配置虚拟机静态IP地址 一.安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子 ...
- 媒体查询(media):设置PC端网页居中显示
@media screen and (min-width: 768px){ body{ background-color: #EAEAEA; } #fater{ width: 640px; margi ...
- JDBC vs Hibernate(转)
jdbc和Hibernate区别 刚开始学习JAVA时,认为Hibernate是一个很神圣的东西,好像是会了SSH,就能走遍全世界一样.记得曾经在枫叶面试的时候,我们几个同学出还说这个公司怎么这么的落 ...
- httpserver支持路由传输控制器
main.go package main import ( "net/http" "com.jtthink.net/myhttpserver/core" ) t ...
- 【arduino】anroid的app与arduino的ch05,进行蓝牙通信遇到的问题
Arduino程序上传不成功 显示系统找不到指定文件 错误信息显示是 avrdude: ser_open(): can't open device "\\.\COM1": 系统找不 ...
- Amazon Redshift数据迁移到MaxCompute
Amazon Redshift数据迁移到MaxCompute Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务Ma ...
- SpringBoot 异步 定时任务 邮件
springboot异步 一: 在 MyConfiguration.java 中开启注解 @Configuration//指明当前类是一个配置类:就是来替代之前的Spring配置文件@EnableAs ...
- 原生js分页
<html> <head> <meta charset='utf-8'> <style type="text/css"> #idDa ...
- python系列之(5)PyMySQL的使用
简介 PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中是使用mysqldb. 安装 pip3 install pymysql 创建连接 #!/usr ...