2002年NOIP普及组复赛题解
题目涉及算法:
- 级数求和:入门题;
- 选数:搜索;
- 产生数:搜索、高精度;
- 过河卒:动态规划。
级数求和
题目链接:https://www.luogu.org/problemnew/show/P1035
开一个for循环,每次加上1/i,知道和 \(\gt K\) 即可。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
double s, K;
int i;
int main() {
cin >> K;
for (i = 1; s <= K; i ++) s += 1. / (double) i;
cout << i-1 << endl;
return 0;
}
选数
题目链接:https://www.luogu.org/problem/P1036
直接搜索遍历所有的情况,再判断每一种情况下的和是否是素数,即可。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
int n, k, a[22], ans;
bool is_prime(int a) {
if (a < 2) return false;
for (int i = 2; i *i <= a; i ++)
if (a % i == 0) return false;
return true;
}
void dfs(int pre, int cnt, int tmp) {
if (cnt >= k) {
if (is_prime(tmp)) ans ++;
return;
}
for (int i = pre+1; i <= n-k+cnt; i ++) {
dfs(i, cnt+1, tmp+a[i]);
}
}
int main() {
cin >> n >> k;
for (int i = 0; i < n; i ++) cin >> a[i];
dfs(-1, 0, 0);
cout << ans << endl;
return 0;
}
产生数
题目链接:https://www.luogu.org/problemnew/show/P1037
这道题目就是要判断一下 \(0\) 到 \(9\) 这 \(10\) 个数分别能衍生出多少个数。
这里可以用搜索遍历一下,用 \(cnt[i]\) 来表示 \(i\) 可以达到的数的数量。
然后就去遍历一开始给我们的数的每一位,假设第i为对应的数字是 \(a\) ,那么答案将乘上 \(cnt[a]\) 。
最终输出答案即可。
不过由于答案有可能达到 \(30^{10}\) ,所以得用高精度。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
vector<int> g[11];
bool vis[11];
char s[33];
int n, cnt[11], ans[maxn] = { 1 }, tmp[maxn];
void dfs(int u) {
if (vis[u]) return;
vis[u] = true;
int sz = g[u].size();
for (int i = 0; i < sz; i ++) {
int v = g[u][i];
dfs(v);
}
}
void multi(int a) {
memset(tmp, 0, sizeof(tmp));
for (int i = 0; i < maxn; i ++) {
tmp[i] += ans[i] * a;
tmp[i+1] += tmp[i] / 10;
tmp[i] %= 10;
}
for (int i = 0; i < maxn; i ++) ans[i] = tmp[i];
}
int main() {
cin >> s >> n;
while (n --) {
int a, b;
cin >> a >> b;
g[a].push_back(b);
}
for (int i = 0; i <= 9; i ++) {
memset(vis, 0, sizeof(vis));
dfs(i);
if (i == 0) cnt[i] ++;
for (int j = 1; j <= 9; j ++) if (vis[j]) cnt[i] ++;
}
n = strlen(s);
for (int i = 0; i < n; i ++) {
int a = s[i] - '0';
multi(cnt[a]);
}
int i = maxn - 1;
while (!ans[i] && i > 0) i --;
while (i >= 0) cout << ans[i--];
cout << endl;
return 0;
}
过河卒
题目链接:https://www.luogu.org/problem/P1002
这道题目是一道动态规划题。
我们令 \(f[i][j]\) 表示从 \((0,0)\) 走到 \((i,j)\) 的方案数,那么:
- 如果 \((i,j)\) 对应就是马的位置或者在马的公鸡范围内,则 \(f[i][j] = 0\) ;
- 否则(注意,这个否则非常重要),如果 \(i=0,j=0\) ,则 \(f[i][j] = 1\) ;
- 否则,如果 \(i=0\) ,则 \(f[i][j] = f[i][j-1]\) ;
- 否则,如果 \(j=0\) ,则 \(f[i][j] = f[i-1][j]\) ;
- 否则,\(f[i][j] = f[i-1][j] + f[i][j-1]\) 。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
int n, m, x, y;
long long f[maxn][maxn];
int main() {
cin >> n >> m >> x >> y;
for (int i = 0; i <= n; i ++) {
for (int j = 0; j <= m; j ++) {
if (x==i && y==j || abs(x-i)==1 && abs(y-j)==2 || abs(x-i)==2 && abs(y-j)==1)
f[i][j] = 0;
else if (!i && !j) f[i][j] = 1;
else if (!i) f[i][j] = f[i][j-1];
else if (!j) f[i][j] = f[i-1][j];
else f[i][j] = f[i-1][j] + f[i][j-1];
}
}
cout << f[n][m] << endl;
return 0;
}
2002年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 这道题目 ...
随机推荐
- 使用openpyxl模块时出现错误: zipfile.BadZipFile: File is not a zip file
通过Pycharm工具新建一个xlsx文件. 再通过openpyxl模块读取该表时,报错: zipfile.BadZipFile: File is not a zip file 如下所示: 解决办法: ...
- (实现)vue.js最简实现
Vue.winward.js vue.js最简实现(the most simple vue.js) 让所有人都看得懂Vue原理 建议看完Vue.winward.js后,结合mpvue源码解读单页应用路 ...
- 网页性能测试之WebPageTest
想知道您的网站,性能怎么样? 很自然,首先得找一个广被认可的测试工具.我们推荐WebPageTest: WebPageTest 它是google 开源项目”make the web faster “的 ...
- 【Leetcode】两数之和,三数之和,四数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- SQLServer —— EXISTS子查询
一.删除数据库 use master go if exists (select * from sysdatabases where name = 'Demo') drop database Demo ...
- SPSS详细操作:生存资料的Cox回归分析
SPSS详细操作:生存资料的Cox回归分析 一.问题与数据 某研究者拟观察某新药的抗肿瘤效果,将70名肺癌患者随机分为两组,分别采用该新药和常规药物进行治疗,观察两组肺癌患者的生存情况,共随访2年.研 ...
- Directx11教程(54) 简单的基于GS的billboard实现
原文:Directx11教程(54) 简单的基于GS的billboard实现 本章我们用一个billboard的实现来学习D3D11中的GS. 在VS shader中,我们输入的是顶点 ...
- jmeter测试APP时如何录制脚本
jmeter录制脚本需要注意的点: (1)手机和电脑需要处于一个局域网内(如手机和电脑所使用一个wifi) (2)设置手机代理的时候手机IP填写本机IP,端口号要和jmeter的相同,一般情况下端口号 ...
- bzoj1221 软件开发
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- Please upgrade the installed version of powershell to the minimum required version and run the command again.
版权声明:本文为博主原创文章,转载请注明出处.谢谢 https://blog.csdn.net/cow66/article/details/77993908 我的系统是windows 7 安装了vag ...