2012年NOIP普及组复赛题解
题目涉及算法:
- 质因数分解:入门;
- 寻宝:模拟;
- 摆花:动态规划;
- 文化之旅:搜索。
质因数分解
题目链接:https://www.luogu.org/problem/P1075
这道题目只需要开个 for 循环就能够把书求出来。
开一个循环变量 i 从 2 开始一直加加,碰到的第一个能够整除n的i,就输出 \(n/i\) 然后 break 即可。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
for (int i = 2; ; i ++) if (n % i == 0) { cout << n / i << endl; break; }
return 0;
}
寻宝
题目链接:https://www.luogu.org/problem/P1076
标准模拟题,模拟一下爬房间的过程即可。
但是我语文不好,这道题目读了半天才读懂。
可以优化,优化原理是去除没存寻找的循环。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int MOD = 20123;
int n, m, has_key[10010][110], num[10010][110], sum[10010], id, ans;
int main() {
cin >> n >> m;
for (int i = 0; i < n; i ++)
for (int j = 0; j < m; j ++) {
cin >> has_key[i][j] >> num[i][j];
if (has_key[i][j]) sum[i] ++;
}
cin >> id;
for (int i = 0; i < n; i ++) {
int cnt = 0;
int x = num[i][id] % sum[i];
if (x == 0) x = sum[i];
ans = (ans + num[i][id]) % MOD;
while (true) {
if (has_key[i][id]) {
cnt ++;
if (cnt == x) break;
}
id = (id + 1) % m;
}
}
cout << ans << endl;
return 0;
}
摆花
题目链接:https://www.luogu.org/problem/P1077
这道题目用动态规划求解。
我们令状态 \(f[i][j]\) 表示前 \(i\) 种花一共放了 \(j\) 盆的方案数,则:
- \(f[0][0] = 0\) ;
- \(f[i][j] = \sum_{k=0}^{\min(a[i], j)} f[i-1][k]\)
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000007;
const int maxn = 110;
int n, m, a[maxn], f[maxn][maxn];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i ++) cin >> a[i];
f[0][0] = 1;
for (int i = 1; i <= n; i ++)
for (int j = 0; j <= m; j ++)
for (int k = 0; k <= a[i] && j-k >= 0; k ++)
f[i][j] = (f[i][j] + f[i-1][j-k]) % MOD;
cout << f[n][m] << endl;
return 0;
}
文化之旅
题目链接:https://www.luogu.org/problem/P1078
建图,按条件深度优先搜索一下。
然后这道题目的数据可能比较水,所以我在其中加了一个条件,就是步数超过1000我就直接判定为找不到,然后就AC了囧~。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int N, K, M, S, T, d = INT_MAX, c[maxn], a[maxn][maxn], u, v, w;
bool vis[maxn];
vector< pair<int, int> > g[maxn];
void dfs(int u, int tmp) {
if (tmp >= 1000) return; // 没想到这样就AC了~~~
if (tmp >= d) return;
if (u == T) {
d = tmp;
return;
}
vis[ c[u] ] = true;
int sz = g[u].size();
for (int i = 0; i < sz; i ++) {
int v = g[u][i].first;
int w = g[u][i].second;
if (vis[ c[v] ] ) continue;
bool flag = true;
for (int i = 1; i <= K; i ++) {
if (vis[i] && a[ c[v] ][i]) {
flag = false;
break;
}
}
if (flag) {
dfs(v, tmp+w);
}
}
vis[ c[u] ] = false;
}
int main() {
cin >> N >> K >> M >> S >> T;
for (int i = 1; i <= N; i ++) cin >> c[i];
for (int i = 1; i <= K; i ++)
for (int j = 1; j <= K; j ++)
cin >> a[i][j];
while (M --) {
cin >> u >> v >> w;
g[u].push_back( make_pair(v, w) );
g[v].push_back( make_pair(u, w) );
}
dfs(S, 0);
if (d == INT_MAX) d = -1;
cout << d << endl;
return 0;
}
2012年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 这道题目 ...
随机推荐
- Spring使用JDBC配置具名参数
好处:若有多个参数,则不用再去对应位置?,直接对应参数名,便于维护 缺点:较为麻烦 使用具名参数时可以使用以下的方法 好处,通过实现类BeanPropertySqlParameterSource之间传 ...
- 转:国内从事CV相关的企业
http://blog.csdn.net/carson2005/article/details/7356225 经常碰到朋友问我国内从事计算机视觉(CV)领域的公司的发展情况,产品情况,甚至找工作等问 ...
- Django中blank和NULL
当我们在django中添加一个数据库字段时,我们通常会写models.CharField(max_length = 100,null = True,blank = True).用ForeignKey, ...
- jq方法的注意点
当jq方法里面引用的ajax方法和其它方法时,就需要把ajax改为同步,通过ajax方法返回值来判断下一步执行那个方法,你不做判断,浏览器编译执行的时候不会不会按你想的从上之下执行下来. 当安卓手机跟 ...
- Hdu 1800 字符串hash
题目链接 题意: 给出n(n<=3000)个字符串(长度<30,数字组成,肯能存在前导0), 问该序列最少可以分成多少个单调序列.可以转化成求相同字符串的个数的最大值 附上代码: /*** ...
- 散列表(Hash Table)
散列表(hash table): 也称为哈希表. 根据wikipedia的定义:是根据关键字(Key value)而直接访问在内存存储位置的数据结构.也就是说,它通过把键值通过一个函数的计算,映射到表 ...
- 使用R拟合分布
使用R拟合分布 几个常用的概率函数介绍 这里,参考R语言实战,以及[Fitting Distribution with R]的附录. 一.认识各种分布的形态 1.1 连续型随机变量的分布 首先,我们来 ...
- 【JZOJ1637】【ZJOI2009】狼和羊的故事
题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干 ...
- 【7.18总结】KM算法
先贴代码,参考博客来源于:https://blog.csdn.net/zyy173533832/article/details/11519291#commentBox 例题:HDU 2255 题意:n ...
- 2019-10-18-dotnet-文件读写务必注意事项
title author date CreateTime categories dotnet 文件读写务必注意事项 lindexi 2019-10-18 08:42:53 +0800 2019-10- ...