MENU

Chtholly's request 题解 | ACM

April 5, 2019 • 我爱学习

题目大意如果一个数字是回文并且其除去前导零的十进制表示的长度是偶数,我们将其称为zcy数。
数字是回文意味着当以十进制表示形式写入时,它不包含前导零同时向前和向后读的数字是相同的。
例如,12321和1221是回文,123和12451不是。而且,1221是zcy号而12321不是。
给定整数k和p,计算k个最小zcy数的和,并输出该和模p后的值。
输入数据The first line contains two integers k and p (1 ≤ k ≤ $10^5$, 1 ≤ p ≤ $10^9$).
数据输出Output single integer — answer to the problem.
样例输入2 100
样例输出33
样例输入5 30
样例输出15

思路简述

  • 此题的主要关键就是回文数,11、1221这样的回文数,并且判断回文数的大小。
  • 这破题的关键就是这类回文数的一个规律:回文数1221是由12翻转而来,并且13翻转过来的1331一定大于1221。
  • 所以我的思路就是,通过一个数对称一下,生成一个回文数,然后相加,取模
 #include<stdio.h>
long long n,k,p,sum;
int main()
{

    while(~scanf("%d %d",&k,&p))
    {
        sum = 0;
        for(int i = 0;i <= k;i++)
        {
            n = i;
            int temp = i;
            while(temp)
            {
                n = n * 10+ temp%10;
                temp /= 10;
            }
            sum += n%p;
        }
        printf("%d\n",sum%p);
    }
    return 0;
}

问题

  • 在提交代码的过程中,我遇到一个问题,就是long long必须定义为全局变量,如果是局部变量会报TLE,这是为什么?
Last Modified: September 8, 2021