【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)
题干:
如果一个数大于等于 10且任意连续两位都是质数,那么就称之为 Wish 数。当然,第一个 Wish 数是 11。
比如 97,111,131,119 都是 Wish 数,而 12,136 则不是。
问第 N 个 Wish 数是多少。
输入格式
一个整数 NN。
输出格式
一个 Wish 数。
数据范围
对于 30\%30% 的数据:1 \le N \le 211≤N≤21。
对于 60\%60% 的数据:1 \le N \le 10001≤N≤1000。
对于 100\%100% 的数据:1 \le N \le 97979797979797971≤N≤9797979797979797。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
1
样例输出复制
11
解题报告:
思路:预处理一下 1 - 9 每个数后面可以跟的能够与它组成两位数字并且为素数的数字。
dp[ i ] [ j ] i 的含义是 i 长度为i 的数字,开头为 j 的 wish 数,那么他就可以由 dp [ i - 1] [ 预处理的 g[ j ] ]转移而来,注意处理边界,也就是i==2的情况。
需要f [ i ]存储的是 长度为 i 的Wish总数 ,最后根据res去具体定位那个数是个几位数(也就是看还剩下多少数可以放)。然后从 高位开始确定每一位数字是什么,枚举每一位数字时候从小到大。。这也是为什么预处理的时候需要两层循环,而非10~99这样,就是因为这个顺序问题。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e6 + 5;
ll dp[45][10],f[45];//dp[i][j] : i位整数以j这个数字开头
vector<int> vv[11];
ll n,sum;
string ans;
bool is(int x) {if(x<2) return 0 ;for(int i = 2; i*i<=x; i++) {if(x%i == 0) return 0 ;}return 1;
}
int main()
{for(int i = 0; i<10; i++) {for(int j = 0; j<10; j++) {if(is(i*10 + j)) vv[i].pb(j);}}for(int j = 1; j<10; j++) vv[10].pb(j); //for(int j = 1; j<10; j++) dp[2][j]=1;//f[2] = for(int i = 2; i<=40; i++) {for(int j = 1; j<10; j++) {int up = vv[j].size();for(int k = 0; k<up; k++) {int x = vv[j][k];if(i == 2) dp[i][j]++;else dp[i][j] +=dp[i-1][x] ;}f[i] += dp[i][j];}}cin>>n;int i=2;while(sum + f[i] < n) sum += f[i],i++;ll res = n;res -= sum;int x = 10;//枚举首位 for(;i>=2; i--) {int up = vv[x].size();for(int k = 0; k<up; k++) {int j = vv[x][k];if(res - dp[i][j] > 0 ) res -= dp[i][j]; else {ans.pb('0'+j);x=j;break;} }}ans.pb('0'+vv[x][res-1]);cout << ans << endl;return 0 ;}
【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)相关推荐
- 【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)
题干: 蒜头去嘉年华玩儿套圈圈,是这么玩儿的.有一些瓶口口径不同的啤酒瓶,瓶子里面有一些奖品.如果蒜头用手上的圈圈套中了啤酒瓶,那么奖品就归他了. 假设蒜头君无限精准,指哪儿打哪儿,并且蒜头了解到,只 ...
- 计蒜客NOIP模拟赛4 D2T1 鬼脚图
鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...
- 计蒜客NOIP模拟赛(2) D1T1邻家男孩
凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...
- 计蒜客NOIP模拟赛(2) D2T2紫色百合
[问题描述] "牵着你的手的是她,路边开满了紫色的百合花--" 你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行'1',第i朵紫色百合的权值在二 ...
- 计蒜客NOIP模拟赛4 D2T2 跑步爱天天
YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...
- 【计蒜客2017NOIP模拟赛1】
D1T1 题面 题解:一开始以为傻题,旋转个坐标系就行了,结果光荣爆零~ 结果发现旋转坐标系后,由于多了一些虚点,锤子砸到虚点上了~gg [没有代码] D1T2 题面 题解:计算出每个边对答案的贡献即 ...
- 计蒜客信息学入门赛 #17--B
蒜头君平时勤工俭学,在两家店 A,BA,B 里都有兼职,蒜头君一天只会去一家店里打工,现在告诉你蒜头君每天的打工情况,请你帮他计算一下,他最多连续多少天是去同一家店打工的? 输入格式 只有一行由 A, ...
- 计蒜客信息学入门赛 #16--B
蒜头君报名参加了折纸兴趣小组, 他表现出了极大的热情,折出了 nn 件折纸作品. 他的作品只有 33 种,分别是长方形.正方形和三角形. 现在蒜头君很想知道他的 nn 件折纸的周长之和. 输入格式 第 ...
- 计蒜客信息学入门赛 #16--C--最大区间包含问题--待完善
蒜头君的工厂需要生产 nn 个产品,每个产品会在记录本上记录开始生产的时间 xx 以及完成生产的时间 yy. 现在蒜头君拿到这本记录本以后想知道最多有多少件产品同时在生产线上生产. 注意:在同一时刻总 ...
最新文章
- wpf 绘制rectangle 代码
- Android socket 编程 实现消息推送(一)
- Solr 6.7学习笔记(04)-- Suggest
- 了解LSTM和GRU
- ORACLE搭建Stream过程中报错【error收集】
- 每天一小时python官方文档学习(五)————数据结构之元组、集合与字典
- JAVA——两个List集合求交集、并集和差集(去重)模板
- 通过iMazing将Safari浏览器的书签导出至电脑
- C# TimeSpan 计算时间差(时间间隔)
- 短视频去水印解析二次运用--全网短视频解析去水印软件
- 如何用xmlspy将xml文档生成xsd文件
- storm风暴英雄 tempo_风暴英雄Tempo Storm 安娜版本天梯环境速报 安娜强度居T3
- 小程序ibeacon三点定位
- Android 程序保活,锁机代码
- MySQL入门第十天(数据库编程)
- bugku Simple_SSTI_1and 2(SSTI模板注入)
- 锂离子电池被动均衡深度理解
- 不同音视频传输协议的对比
- android 图片凸出
- 我与微笑哥以及 Java 极客技术的前世今生
热门文章
- Microsoft Jet SQL 参考在线手册
- [密码学基础][每个信息安全博士生应该知道的52件事]52.先进的应用概念 系统的大致安全需求
- [Leetcode][第133题][JAVA][克隆图][DFS][BFS][深拷贝]
- AtCoder-2379 - 连接竹竿 思维 | 数学
- mysql galera 下载_Mysql-Galera Cluster
- python找人_python之找最后一个人
- vb.net怎么调用fastreport报表_财务分析-企业财务管理报表模板制作实现智能化的财务运营...
- Eclipse——恢复的默认窗口设置篇
- PHP程序中时间戳,php 时间戳常用代码
- java小应用_java小应用