洛谷 P1015 回文数 Label:续命模拟QAQ

题目描述

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。

又如:对于10进制数87:

STEP1:87+78 = 165 STEP2:165+561 = 726

STEP3:726+627 = 1353 STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10,N=16)进制数M(100位之内),求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入输出格式

输入格式:

两行,分别是N,M。

输出格式:

STEP=ans

输入输出样例

输入样例#1:

10
87

输出样例#1:

STEP=4

代码

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define MAXN 20000
 6 using namespace std;
 7 char c[MAXN];
 8 int a[MAXN],b[MAXN];
 9 int M,lena;
10
11 int check(){
12     int i=1,j=lena;
13     while(i<=j){
14         if(a[i]!=a[j]) return 0;
15         ++i,--j;
16     }
17     return 1;
18 }
19
20 int trans(){
21     for(int i=1;i<=lena;i++){
22         b[i]+=a[i]+a[lena+1-i];
23         b[i+1]+=b[i]/M;
24         b[i]%=M;
25     }
26     swap(a,b);memset(b,0,sizeof(b));
27     if(a[lena+1]!=0) ++lena;
28 //    for(int i=1;i<=5;i++) printf("%d",a[i]);
29 //    puts("");
30     if(check())return 1;
31     return 0;
32 }
33
34 int main(){
35 //    freopen("01.in","r",stdin);
36     scanf("%d",&M);
37     scanf("%s",c);
38     lena=strlen(c);
39     for(int i=0;i<strlen(c);i++) if(c[strlen(c)-1-i]<=‘9‘) a[i+1]=int(c[strlen(c)-1-i])-int(‘0‘); else a[i+1]=int(c[strlen(c)-1-i])-int(‘A‘)+10;
40
41
42     if(check()) { puts("0");return 0;}
43     for(int i=1;i<=30;i++){
44         if(trans()){
45             printf("STEP=%d",i);
46             return 0;
47         }
48     }
49
50     puts("Impossible!");
51     return 0;
52 }

参考高精度就好,另外不爽的是这个N这样写的意思是可以为16,理解错了于是Line39就WA了

时间: 2024-10-11 00:30:50

洛谷 P1015 回文数 Label:续命模拟QAQ的相关文章

洛谷 P1015 回文数

P1015 回文数 标签 字符串 模拟 NOIp普及组 1999 云端 难度 普及- 时空限制 1s / 128MB 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一

P1015 回文数

P1015 回文数 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884. 写一个程序,给定一个N(2<=

洛谷 U3348 A2-回文数

题目背景 方方方很喜欢回文数,于是就有了一道关于回文数的题目. 题目描述 求从小到大第n(1<=n<=10^18)个回文数. 注释:出题人认为回文数不包括0. 输入输出格式 输入格式: 一行一个正整数n. 输出格式: 第n个回文数. 输入输出样例 输入样例#1: 2333 输出样例#1: 1334331 输入样例#2: 12345678987654321 输出样例#2: 23456789876543222234567898765432 说明 对于50%的数据,n<=3000. 对于100

洛谷U3348 A2-回文数

U3348 A2-回文数 题目背景 方方方很喜欢回文数,于是就有了一道关于回文数的题目. 题目描述 求从小到大第n(1<=n<=10^18)个回文数. 注释:出题人认为回文数不包括0. 输入输出格式 输入格式: 一行一个正整数n. 输出格式: 第n个回文数. 输入输出样例 输入样例#1: 2333 输出样例#1: 1334331 输入样例#2: 12345678987654321 输出样例#2: 23456789876543222234567898765432 说明 对于50%的数据,n<

[luogu p1015] 回文数

传送门 题面 题面描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个十进制数\(56\),将\(56\)加\(65\)(即把\(56\)从右向左读),得到\(121\)是一个回文数. 又如:对于十进制数\(87\): STEP1:\(87+78 = 165\) STEP2:\(165+561 = 726\) STEP3:\(726+627 = 1353\) STEP4:\(1353+3531\) = \(4884\) 在这里的一步是指进行了一次\(

洛谷P1217回文质数-Prime Palindrome回溯

P1217 [USACO1.5]回文质数 Prime Palindromes 题意:给定一个区间,输出其中的回文质数: 学习了洛谷大佬的回溯写法,感觉自己写回溯的能力不是很强: #include <cstdio> #include <iostream> #include <cmath> const int maxn = 100; using namespace std; int a[maxn],l,r; bool is_prime(int n) //判断素数 { int

洛谷 P2010 回文日期

P2010 回文日期 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期.显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同. 牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的.现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的. 一个8位数字是回文的,当且仅当对于所有的i ( 1 <=i<=

洛谷 P1012 拼数 Label:续命模拟QAQ

题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613 输入输出格式 输入格式: 第一行,一个正整数n. 第二行,n个正整数. 输出格式: 一个正整数,表示最大的整数 输入输出样例 输入样例#1: 3 13 312 343 输出样例#1: 34331213 代码 1 #include<iostream> 2

洛谷 洛谷 P1011 车站 Label:续命模拟QAQ 未知50分

题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站)上.下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律.现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车).试问x站开出时车上的人数是多少? 输入输出格式 输入格式: