题目涉及算法:

  • 明明的随机数:简单模拟;
  • 开心的金明:01背包;
  • Jam的计数法:模拟;
  • 数列:二进制。

明明的随机数

题目链接:https://www.luogu.org/problem/P1059

简单模拟:排序+去重。使用 sort + unique 实现。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n, a[111];
  4. int main() {
  5. cin >> n;
  6. for (int i = 0; i < n; i ++) cin >> a[i];
  7. sort(a, a+n);
  8. n = unique(a, a+n) - a;
  9. cout << n << endl;
  10. for (int i = 0; i < n; i ++) {
  11. if (i) putchar(' ');
  12. cout << a[i];
  13. }
  14. cout << endl;
  15. return 0;
  16. }

开心的金明

题目链接:https://www.luogu.org/problem/P1060

这道题目就是一道裸的01背包,每件物品的体积对应价格,价值对应价格和重要度的乘积。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 30030;
  4. int V, n, c, p, f[maxn];
  5. int main() {
  6. cin >> V >> n;
  7. while (n --) {
  8. cin >> c >> p;
  9. for (int i = V; i >= c; i --)
  10. f[i] = max(f[i], f[i-c] + c * p);
  11. }
  12. cout << f[V] << endl;
  13. return 0;
  14. }

Jam的计数法

题目链接:https://www.luogu.org/problem/P1061

模拟题,找到单调递增的字符串的下一个排列。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. bool used[26];
  4. char ch[30];
  5. int s, t, w;
  6. bool get_next() {
  7. memset(used, 0, sizeof(used));
  8. for (int i = 0; i < w; i ++) used[ ch[i] - 'a' ] = true;
  9. for (int i = w-1; i >= 0; i --) {
  10. int st = ch[i] - 'a';
  11. int cnt = 0;
  12. for (int j = st+1; j <= t; j ++) if (!used[j]) cnt ++;
  13. if (cnt >= w-i) {
  14. int id = i;
  15. for (int j = st+1; j <= t; j ++) {
  16. if (!used[j]) {
  17. ch[id++] = 'a' + j;
  18. if (id >= w) break;
  19. }
  20. }
  21. return true;
  22. }
  23. used[st] = false;
  24. }
  25. return false;
  26. }
  27. int main() {
  28. cin >> s >> t >> w >> ch;
  29. s --; t --;
  30. for (int i = 0; i < 5 && get_next(); i ++)
  31. cout << ch << endl;
  32. return 0;
  33. }

数列

题目链接:https://www.luogu.org/problem/P1062

这道题目需要对二进制有一个理解。

对于 N ,如果我们将其转成二进制数是 \(a_ma_{m-1} \dots a_1a_0\) ,其中 \(a_i\) 为1表示结果中包含 \(k^i\) ,\(a_i\) 为0表示结果中不包含 \(k^i\) 。

那么我们可以发现:

N 对应的数 \(\gt\) N-1 对应的数 \(\gt\) N-2对应的数 …… \(\gt\) 1 对应的数 \(\gt\) 0 对应的数。

所以我们的答案就是N对应的二进制中所有为1的那些位i的 \(\sum k^i\) 。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n, k;
  4. long long ans;
  5. long long quick_mi(long long a, int b) {
  6. if (b == 0) return 1;
  7. if (b == 1) return a;
  8. long long t = quick_mi(a, b/2);
  9. t *= t;
  10. if (b % 2) t *= a;
  11. return t;
  12. }
  13. int main() {
  14. cin >> k >> n;
  15. for (int i = 0; i <= 10; i ++)
  16. if ( n & (1<<i) )
  17. ans += quick_mi(k, i);
  18. cout << ans << endl;
  19. return 0;
  20. }

作者:zifeiy

2006年NOIP普及组复赛题解的更多相关文章

  1. 2010年NOIP普及组复赛题解

    题目及涉及的算法: 数字统计:入门题: 接水问题:基础模拟题: 导弹拦截:动态规划.贪心: 三国游戏:贪心.博弈论. 数字统计 题目链接:洛谷 P1179 这道题目是一道基础题. 我们只需要开一个变量 ...

  2. 2017年NOIP普及组复赛题解

    题目涉及算法: 成绩:入门题: 图书管理员:模拟: 棋盘:最短路/广搜: 跳房子:RMQ/二分答案/DP(本人解法). 成绩 题目链接:https://www.luogu.org/problemnew ...

  3. 2016年NOIP普及组复赛题解

    题目涉及算法: 买铅笔:入门题: 回文日期:枚举: 海港:双指针: 魔法阵:数学推理. 买铅笔 题目链接:https://www.luogu.org/problem/P1909 设至少要买 \(num ...

  4. 2014年NOIP普及组复赛题解

    题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...

  5. 2013年NOIP普及组复赛题解

    题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...

  6. 2011年NOIP普及组复赛题解

    题目涉及算法: 数字反转:模拟: 统计单词数:模拟: 瑞士轮:模拟/排序: 表达式的值:后缀表达式/DP. 数字反转 题目链接:https://www.luogu.org/problem/P1307 ...

  7. 2008年NOIP普及组复赛题解

    题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...

  8. 2005年NOIP普及组复赛题解

    题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...

  9. 2018年NOIP普及组复赛题解

    题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...

随机推荐

  1. Codeforces 113B

    题目链接 B. Petr# time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. WPF快速入门系列(6)—— WPF资源和样式

    一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...

  3. 笔试面试记录-字符串转换成整型数等(aatoi,itoa)

    C语言中经常用到字符串与数字之间的相互转换,常见的此类库函数有atof(字符串转换成浮点数).atoi(字符串转换成整型数).atol(字符串转换成长整形).itoa(整型数转换成字符串).ltoa( ...

  4. iOS自动化打包上传的踩坑记

    http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...

  5. php怎么自动加载

    在 PHP 代码的顶部你是不是经常看到这样的代码. require 'lionis.php'; require 'is.php'; require 'cool.php'; 如果只是引入几个 PHP 脚 ...

  6. 阿里云发布SaaS生态战略,成就亿级营收独角兽

    7月26日,在上海举办的阿里云合作伙伴峰会上,阿里云正式发布SaaS生态战略,计划用阿里云的品牌.渠道.资本.方法论.技术加持伙伴,成就亿级营收独角兽. 该生态战略计划招募10家一级SaaS合作伙伴, ...

  7. PHP核心编程--文件上传(包含多文件上传)

    一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  8. 工信部<<大数据产业发展规划>>

    大数据产业发展规划 (2016-2020年) 发布时间:2017-01-17  来源:规划司 数据是国家基础性战略资源,是21世纪的“钻石矿”.党中央.国务院高度重视大数据在经济社会发展中的作用,党的 ...

  9. Oracle存储过程基本语法及基础教程

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  10. C++:static类

    static自我理解 static使得数据成员或者函数生命周期为整个文件所在程序的生命周期, 在C中还可以用它避免被其它文件使用为外部成员 static类 明确:类的静态数据成员它被所有类对象共享,但 ...