题目涉及算法:

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

明明的随机数

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

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

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, a[111];
int main() {
cin >> n;
for (int i = 0; i < n; i ++) cin >> a[i];
sort(a, a+n);
n = unique(a, a+n) - a;
cout << n << endl;
for (int i = 0; i < n; i ++) {
if (i) putchar(' ');
cout << a[i];
}
cout << endl;
return 0;
}

开心的金明

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

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

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 30030;
int V, n, c, p, f[maxn];
int main() {
cin >> V >> n;
while (n --) {
cin >> c >> p;
for (int i = V; i >= c; i --)
f[i] = max(f[i], f[i-c] + c * p);
}
cout << f[V] << endl;
return 0;
}

Jam的计数法

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

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

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
bool used[26];
char ch[30];
int s, t, w; bool get_next() {
memset(used, 0, sizeof(used));
for (int i = 0; i < w; i ++) used[ ch[i] - 'a' ] = true;
for (int i = w-1; i >= 0; i --) {
int st = ch[i] - 'a';
int cnt = 0;
for (int j = st+1; j <= t; j ++) if (!used[j]) cnt ++;
if (cnt >= w-i) {
int id = i;
for (int j = st+1; j <= t; j ++) {
if (!used[j]) {
ch[id++] = 'a' + j;
if (id >= w) break;
}
}
return true;
}
used[st] = false;
}
return false;
} int main() {
cin >> s >> t >> w >> ch;
s --; t --;
for (int i = 0; i < 5 && get_next(); i ++)
cout << ch << endl;
return 0;
}

数列

题目链接: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\) 。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, k;
long long ans;
long long quick_mi(long long a, int b) {
if (b == 0) return 1;
if (b == 1) return a;
long long t = quick_mi(a, b/2);
t *= t;
if (b % 2) t *= a;
return t;
}
int main() {
cin >> k >> n;
for (int i = 0; i <= 10; i ++)
if ( n & (1<<i) )
ans += quick_mi(k, i);
cout << ans << endl;
return 0;
}

作者: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. 【JZOJ3624】【SDOI2014】数数(count) AC自动机+数位dp

    题面 100 容易想到使用AC自动机来处理禁忌子串的问题: 然后在自动机上数位dp,具体是: \(f_{i,j,0/1}\)表示填了\(i\)位,当前在自动机的第\(j\)个结点上,\(0\)表示当前 ...

  2. Keil新建工程步骤

    第一步:创建工程文件夹 1.新建一个文件夹,例如: 2.在文件夹下创建子文件夹: 文件夹说明: App:存放硬件控制程序: Libraries:存放固件库: Obj:存放生成的文件: Public:存 ...

  3. 前端与编译原理——用JS写一个JS解释器

    说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念.作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于"抽象语法树(AST)".但这仅仅是个开头而已.编 ...

  4. Python 匹配IP地址的正则表达式

  5. linux中的用户、群组和权限

     linux中的用户.群组和权限   新建用户natasha,uid为1000,gid为555,备注信息为“master”   groupadd -g 555 natasha useradd -u 1 ...

  6. No.2 Verilog 模块和描述风格

    2-1 模块 Verilog语言基本的描述单元----模块,模块是用来描述某个设计的功能或结构,以及它与其它外部模块进行通信的端口. module module_name(port_list); De ...

  7. 封装:PDO与MySQL之间的无缝切换

    以下的例子是将MySQL和PDO封装好,再无缝切换: 文件目录: config.php文件:   <?php return array( // 数据库配置 'DB' => array( ' ...

  8. 仔细看看Javascript中的逻辑与(&&)和逻辑或(||)

    学过Java和C的人,都知道逻辑与(&&)和逻辑或(||),他们都是短路运算符,也就是说,对于&&来说,只要左边的操作数是false,它就不会再去判断右边的操作数是tr ...

  9. flask 与celery

    在flask 中使用celery 是特别简单的,celery官网都没有特别介绍如何使用. 使用celery首先要知道怎么配置celery.   1. 实例化celery celery = Celery ...

  10. 巨蟒python全栈开发-第11阶段 ansible3_1入门四个模块command&shell&script&copy

    大纲 1.系统安装与机器克隆 2.ansible介绍和host-pattern格式 3.command模块 4.shell模块 5.script模块 6.copy模块