猜数字游戏
来源:互联网 发布:c语言数据类型举例 编辑:程序博客网 时间:2024/05/16 08:54
牛牛和羊羊在玩一个有趣的猜数游戏。在这个游戏中,牛牛玩家选择一个正整数,羊羊根据已给的提示猜这个数字。第i个提示是"Y"或者"N",表示牛牛选择的数是否是i的倍数。
例如,如果提示是"YYNYY",它表示这个数使1,2,4,5的倍数,但不是3的倍数。
注意到一些提示会出现错误。例如: 提示"NYYY"是错误的,因为所有的整数都是1的倍数,所以起始元素肯定不会是"N"。此外,例如"YNNY"的提示也是错误的,因为结果不可能是4的倍数但不是2的倍数。
现在给出一个整数n,表示已给的提示的长度。请计算出长度为n的合法的提示的个数。
例如 n = 5:
合法的提示有:
YNNNN YNNNY YNYNN YNYNY YYNNN YYNNY
YYNYN YYNYY YYYNN YYYNY YYYYN YYYYY
所以输出12
例如,如果提示是"YYNYY",它表示这个数使1,2,4,5的倍数,但不是3的倍数。
注意到一些提示会出现错误。例如: 提示"NYYY"是错误的,因为所有的整数都是1的倍数,所以起始元素肯定不会是"N"。此外,例如"YNNY"的提示也是错误的,因为结果不可能是4的倍数但不是2的倍数。
现在给出一个整数n,表示已给的提示的长度。请计算出长度为n的合法的提示的个数。
例如 n = 5:
合法的提示有:
YNNNN YNNNY YNYNN YNYNY YYNNN YYNNY
YYNYN YYNYY YYYNN YYYNY YYYYN YYYYY
所以输出12
思路:1.第i个数是素数,那么dp[i]=dp[i-1]*2,这是因为素数和前面的所有数都没有依赖关系,因此YN都行2.第i个数不是素数的幂次,也就是像6这样的数字,你会发现,它已经被2,3唯一确定了,例如23分别是YY,那么6一定是Y,23分别是YN或NY或NN,6一定是N,所以说这时候有dp[i]=dp[i-1]
3.第i个数是素数的幂次,它不能唯一确定,比如4,当2为Y时,4不确定,可以是Y,也可以是N。将4和2放入集合,若2取,4必定取,所以有NN,YN,YY三种情况。那么引申一下,加入8就是3个元素的集合,共4种情况,9就是2个元素的集合(3、9),有3种情况,以此类推。最后将这些情况相乘即可,因为这些集合之间相互不影响
#include <iostream>#include <vector>#include <cstring>#include <string>using namespace std; const int MOD = 1E9+7;const int maxn = 1e6+5; int vis[maxn]; int main(){ int n; while(cin >> n) { long long ans = 1; for(int i = 2; i <= n; i++) { int cnt = 0; if(vis[i]) continue; for(int j = i+i; j <= n; j += i) //处理他的倍数 { vis[j] = 1; } //求i的幂次 long long mi = i; //用 int 会溢出 while(mi <= n) { cnt++; mi *= i; } ans = ans * (cnt + 1) % MOD; } cout << ans << endl; }}
阅读全文
0 0
- 游戏_猜数字
- 猜数字游戏
- 猜数字游戏
- 猜数字游戏源码
- 猜数字游戏
- 猜数字游戏
- python猜数字游戏
- 猜数字游戏
- 猜数字游戏
- 猜数字游戏
- 猜数字游戏
- 猜数字游戏
- 猜数字游戏
- 关于猜数字游戏
- 猜数字游戏实现
- 猜数字游戏
- 模拟猜数字游戏
- 猜数字游戏
- 大学生课程表的制作(1)——模拟登录
- day07c++
- oracle 11G 用户到期修改方法
- 关于配置了数据库方言为MySQLInnoDBDialect后Hibernate不能自动建表的问题
- Js中的this
- 猜数字游戏
- 新手学C++多线程编程(1)组件
- 数字三角形
- 关于VC中LineDDA函数的调用
- 高德地图显示
- 微信小程序实例--洗衣小程序开发经验分享
- cocos2d-x 的环境搭建
- hibernate和mybatis一对一和一对多配置
- jmeter---正则表达式