Vijos 捕风捉影

背景

《风云》里有详细记载,自己去看吧^_^...

描述

有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀。风:你给我闭嘴。)捕风捉影的关键是换气(换不好就会大喘气...)。

使用捕风捉影这一招时并不是每一步都喘气,而是在特定的步数喘气。一般来说功力越高,喘气越稀疏。喘气的步数符合特定规律:第一要是SUSHU(弟子二:哇塞!堂主,你还会鸟语,我好好崇拜你呦!可是SUSHU是什么意思呢?风:笨蛋,那是汉语拼音!)第二要是一个回文数,回文数就是正反念一样的数,如:123321,121,5211314(弟子三:堂主,最后一个好象不是...风:废话,当然不是了,我是考察一下你们的纠错能力!)现在给出两个数M,N(5<=M<N<=100,000,000),你要算出M,N之间需要换气的都有哪几步。(包括M,N)。算出来的可以提升为本堂一级弟子,月薪(1000000000000000000000000000000000000000000 MOD 10 )元。

格式

输入格式

两个整数M,N。用空格隔开。

输出格式

在M,N之间的换气点,每个一行。

样例1

样例输入1

100 500

Copy

样例输出1

101
131
151
181
191
313
353
373
383

Copy

来源

来自天下会神风堂主

 1 /*
 2     乍一看数据范围很大
 3     其实只需要注意两点就行了
 4     这个回文素数必定是2n-1位 2n位回文数必定被11整除
 5     回文数第一位只能是1 3 7 9
 6     把回文数表打出来在判断就好了
 7 */
 8 #include<cmath>
 9 #include<cstdio>
10 #include<iostream>
11 #include<algorithm>
12 #define MAXN 1010
13
14 using namespace std;
15
16 int n,m,cnt;
17 int a[MAXN];
18
19 inline void read(int&x) {
20     x=0;int f=1;char c=getchar();
21     while(c>‘9‘||c<‘0‘) {if(c==‘-‘) f=-1;c=getchar();}
22     while(c>=‘0‘&&c<=‘9‘) {x=(x<<1)+(x<<3)+c-48;c=getchar();}
23     x=x*f;
24 }
25
26 inline bool pd(int x) {
27     for(int i=2;i<=sqrt(x);i++)
28       if(x%i==0) return false;
29     return true;
30 }
31
32 inline void sushu() {
33     for(int i=1;i<=9;i+=2) {
34         if(pd(i*10+i)) a[++cnt]=i*10+i;
35           if(i!=5)
36         for(int j=0;j<=9;j++) {
37             if(pd(i*100+j*10+i)) a[++cnt]=i*100+j*10+i;
38             for(int k=0;k<=9;k++) {
39                 if(pd(i*10000+j*1000+k*100+j*10+i)) a[++cnt]=i*10000+j*1000+k*100+j*10+i;
40                 for(int l=0;l<=9;l++) {
41                     if(pd(i*1000000+j*100000+k*10000+l*1000+k*100+j*10+i))
42                       a[++cnt]=i*1000000+j*100000+k*10000+l*1000+k*100+j*10+i;
43                 }
44             }
45         }
46       }
47 }
48
49 int main() {
50     read(n);read(m);
51     a[++cnt]=5;a[++cnt]=7;
52     sushu();
53     sort(a+1,a+1+cnt);
54     for(int i=1;i<=cnt;i++)
55       if(a[i]>=n&&a[i]<=m)
56         printf("%d\n",a[i]);
57     //printf("%d\n",cnt);
58     return 0;
59 }

代码

时间: 2024-08-28 11:40:13

Vijos 捕风捉影的相关文章

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

Vijos P1785 同学排序【模拟】

同学排序 描述 现有m位同学,第1位同学为1号,第2位同学为2号,依次第m位同学为m号.要求双号的学生站出来,然后余下的重新组合,组合完后,再次让双号的学生站出来,重复n次,问这时有多少同学出来站着? 样例1 样例输入1 1989 5 样例输出1 1926 限制 1s 提示 [数据范围] 1≤n≤10 100≤m≤100000 题目链接:https://vijos.org/p/1785 分析:站出序号为偶数的人,如果总人数为奇数,剩余人数向上取整再折半就好了! 下面给出AC代码: 1 #incl

Vijos 1057 盖房子

二次联通门 : Vijos 1057 盖房子 /* Vijos 1057 盖房子 简单的dp 当前点(i, j)所能构成的最大的正方形的边长 为点(i - 1, j - 1)与(i, j - 1), (i - 1, j)三点中最小的边长构成.. 一遍递推, 一边取最大即可 */ #include <cstdio> #define Max 1009 inline int min (int a, int b) { return a < b ? a : b; } inline int max

Vijos 1193 扫雷 【动态规划】

扫雷 描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余"任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和他8连通的格子里面雷的数目.现在棋盘是n*2的,第一列里某些格子是雷,而第二列没有雷,如:o 1* 2* 3* 2o 2* 2* 2 ('*'代表有雷,'o'代表无雷)由于第一类的雷有可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息求第一列雷有多少中摆放方案.

Vijos 1523 贪吃的九头龙 【树形DP】

贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted by JackDavid127 描述 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱落. 有一天,有M个脑袋的九头龙看到一棵长有N个果子的果树,喜出望外,

vijos P1448 校门外的树

描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:K=1,K=1,读入l.r表示在区间[l,r]中种上一种树,每次操作种的树的种类都不同K=2,读入l,r表示询问l~r之间能见到多少种树(l,r>0) 输入格式 第一行n,m表示道路总长为n,共有m个操作接下来m行为m个操作 输出格式 对于每个k=2输出一个答案 提示 范围:20%的数据保证,n,m<=10060%的数据保证

Vijos P1061 迎春舞会之三人组舞 DP

题目链接:https://vijos.org/p/1061 n个人选出3*m人,排成m组,每组3人. 站的队形——较矮的2个人站两侧,最高的站中间. 从对称学角度来欣赏,左右两个人的身高越接近,则这一组的“残疾程度”越低. 计算公式为 h=(a-b)^2 (a.b为较矮的2人的身高)现在候选人有n个人,要从他们当中选出3*m个人排舞蹈,要求总体的“残疾程度”最低; input: 第一排为m,n. 第二排n个数字,保证升序排列. 思路:由于和中间高的人无关,但是每次选旁边两个的时候,会由于没有比这

【vijos】1789 String(组合计数+奇怪的题)

https://vijos.org/p/1789 我yy了一下发现我的方法没错啊,为嘛才80分.. 当n=k的时候,显然这是个排列就能做的,枚举一半必定有且只有一个另一半与之对应,所以直接做就行了. 当k是奇数的时候,我们可以假设有一个奇数长的模型,每一次向右移动一个,显然最前边和最后边.此前边和次后边以此类推,他们都是相等的,也就是说,这个序列一定由两个元素组成(可以相同)那么显然有m*m种方法 当k是偶数的时候,根据前边的分析,显然只有m种序列(每一种序列的元素是一模一样的) 我觉得这是对的

vijos P1836HYS与七夕节大作战 (01背包之2--转换dp对象)

题目:vijos P1836HYS与七夕节大作战 题意: n个对象,每价值为vi,比重pi,总容量100 分析: 类似背包重量的比重pi为实数,不能作为下标,所以改变dp对象 将求容量100内的最大价值 → 求相应价值的最小容量, 则容量第一个≤100的价值,为符合条件的价值最大的值 状态:dp[v]:价值为v的最小容积 转移方程:         dp[V] = min(dp[V], dp[V-v[i]] + p[i]); 核心: for(i = 1; i<=n; i++) {     for