Content

我们将长度为偶数的回文数称作 zcy 数,比如 \(11,1221\) 是 zcy 数,而 \(34,121\) 不是。假设第 \(i\) 个 zcy 数为 \(a_i\),求 \(\sum\limits_{i=1}^na_i\)(前 \(n\) 个 zcy 数的和)模 \(p\) 后的结果。

数据范围:\(1\leqslant n\leqslant 10^5,1\leqslant p\leqslant 10^9\)。

Solution

在写题解之前做一个提醒:这篇题解里的代码用 C++11 及以下的语言提交会出现 WA 的情况,需要用 C++14 及以上的语言提交。 有可能是因为 C++14 及以上的语言里面的语句和 C++14 以下的语言的对应语句的效果不同。

以下是正文:

由于无论什么数乘以 \(2\) 都是偶数,所以我们很容易发现,第 \(i\) 个 zcy 数,即第 \(i\) 个长度为偶数的回文数,其实就相当于将 \(i\) 和 \(i\) 反转过后的数拼接在一起得到的数,所以,我们考虑直接暴力求出 \(i\) 翻转后得到的数 \(i'\),然后设数字 \(x\) 的长度为 \(L_x\),那么第 \(i\) 个 zcy 数就可以这样表示:\(10^{L_x}\times i+i'\),然后直接暴力加,边加边取模即可。

如果您去 CF 官网上看这道题目的标签的话,你会发现里面有个“暴力”的标签,所以这道题目总的来说就是一点:暴力。

Code

ll ans;
int n, m; ll digitnum(ll x) {
ll p = x, ans = 0;
while(p) {
ans++;
p /= 10;
}
return ans;
}
ll turn(ll x) {
ll p = x, ans = 0, digit[27] = {0};
while(p) {
digit[++digit[0]] = p % 10;
p /= 10;
}
_forll(i, 1, digit[0]) ans += digit[i] * (ll)pow(10, digit[0] - i);
return ans;
} int main() {
//This program is written in Windows 10 by Eason_AC
getint(n), getint(m);
_for(i, 1, n) {
int len = digitnum(i), rev = turn(i);
ll tmp = ((ll)pow(10, len) * i + rev) % m;
ans = (ans + tmp % m) % m;
}
writell(ans);
return 0;
}

CF897B Chtholly's request 题解的更多相关文章

  1. codeforces 897B Chtholly's request 偶数长度回文数

    codeforces 897B Chtholly's request 题目链接: http://codeforces.com/problemset/problem/897/B 思路: 暴力求出这100 ...

  2. Codeforces Round #449 (Div. 2) B. Chtholly's request【偶数位回文数】

    B. Chtholly's request time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  3. Codeforces Round #449 (Div. 2)-897A.Scarborough Fair(字符替换水题) 897B.Chtholly's request(处理前一半) 897C.Nephren gives a riddle(递归)

    A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. 897B. Chtholly's request#长度为偶数的回文数(模拟)

    题目出处:http://codeforces.com/problemset/problem/897/B 题目大意:构造一个题意要求的zcy数之后取模 #include<iostream> ...

  5. Codeforces 897 B.Chtholly's request-思维题(处理前一半)

      B. Chtholly's request   time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  6. Codeforces Round #449 (Div. 2)ABCD

    又掉分了0 0. A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input ...

  7. 【bzoj1146】[CTSC2008]网络管理Network 倍增LCA+dfs序+树状数组+主席树

    题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高 ...

  8. Codeforces Round #449 Div. 2 A B C (暂时)

    A. Scarborough Fair 题意 对给定的长度为\(n\)的字符串进行\(m\)次操作,每次将一段区间内的某一个字符替换成另一个字符. 思路 直接模拟 Code #include < ...

  9. 【BZOJ1146】[CTSC2008]网络管理Network 树状数组+DFS序+主席树

    [BZOJ1146][CTSC2008]网络管理Network Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工 ...

随机推荐

  1. 第一章 初始C语言

    第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...

  2. 洛谷 P3600 - 随机数生成器(期望 dp)

    题面传送门 我竟然独立搞出了这道黑题!incredible! u1s1 这题是我做题时间跨度最大的题之一-- 首先讲下我四个月前想出来的 \(n^2\log n\) 的做法吧. 记 \(f(a)=\m ...

  3. 【R】如何将重复行转化为多列(一对一转化一对多)?

    目录 需求 方法一 方法二 需求 一个数据框一列或多列中有重复行,如何将它的重复行转化为多列?即本来两列一对一的关系,如何转化为一对多的关系?普通的spread函数实现较为麻烦. 示例数据如下: It ...

  4. Anaconda3-更换为清华源后依旧报错CondaHTTPError: HTTP 000 CONNECTION FAILED

    前言 今天发现换完清华源以后依旧报错 CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsi.. ...

  5. R语言中的read.table()

    参考资料:http://www.cnblogs.com/xianghang123/archive/2012/06/06/2538274.html read.table(file, header = F ...

  6. shell 除法和格式化输出printf

    相关知识的补充: printf命令模仿C程序库里的printf()程序.printf由POSIX标准所定义,因此使用printf的脚本比使用echo有着更好的移植性. printf使用引用文本或者空格 ...

  7. goto 的用法

    #include <stdio.h> int main() { printf("go to cpy \n"); goto FLASH_CPY; printf(" ...

  8. Spark(十六)【SparkStreaming基本使用】

    目录 一. SparkStreaming简介 1. 相关术语 2. SparkStreaming概念 3. SparkStreaming架构 4. 背压机制 二. Dstream入门 1. WordC ...

  9. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  10. Linux信号1

    信号(signal)是一种软中断,他提供了一种处理异步事件的方法,也是进程间唯一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某进程发生了什么事件,还可以给 ...