「Codeforces 468C」Hack it!
Description
定义 \(f(x)\) 表示 \(x\) 的各个数位之和。现在要求 \(\sum_{i=l}^rf(i)\bmod a\)。
显然 ans=solve(l,r)%a; if(ans<=0) ans+=a; 会在 \(\sum_{i=l}^rf(i)\equiv 0\pmod a\) 时输出错误。给定 \(a\),请你构造一个 Hack 数据。
\(1\leq a\leq 10^{18}\),构造出的 \(l,r\) 需满足 \(1\leq l\leq r\leq 10^{200}\),同时 \(\sum_{i=l}^rf(i)\bmod a=0\)。
Solution
定义 \(g(x)=\sum_{i=1}^xf(i)\),则 \(\sum_{i=l}^rf(i)=g(r)-g(l-1)\)。
首先可以发现,对于 \(1\leq x<10^{18}\),有:
\(\displaystyle f(x+10^{18})-f(x)=1\)
也就是说,当 \([l,r]\) 从 \([x+1,x+10^{18}]\) 变成 \([x+2,x+10^{18}+1]\) 时(整体增大 \(1\)),由于 \(f(x+10^{18}+1)-f(x+1)=1\),因此结果会增加 \(1\)。
那么,当 \([l,r]\) 从 \([1,10^{18}]\) 变成 \([x+1,x+10^{18}]\) 时(整体增大 \(x\)),结果会增加 \(x\)。即:
\(\displaystyle \sum_{i=k+1}^{k+10^{18}}\equiv g(10^{18})+k\pmod a\)
若 \(g(10^{18})\equiv x\pmod a\),取 \(k=a-x\),那么:
\(\displaystyle \sum_{i=a-x+1}^{a-x+10^{18}}\equiv 0\pmod a\)
则可取 \([l,r]\) 为 \([a-x+1,a-x+10^{18}]\)。考虑如何求出 \(x\)。
不难发现,\(g(10^x)=45\times x\times 10^{x-1}+1\)。所以 \(g(10^{18})=45\times 18\times 10^{17}+1\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,x;
signed main(){
scanf("%lld",&a),x=1ull*((int)1e17%a*45%a*18%a+1)%a;
printf("%lld %lld\n",a-x+1,a-x+(int)1e18);
return 0;
}
「Codeforces 468C」Hack it!的更多相关文章
- 「CodeForces 476A」Dreamoon and Stairs
Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...
- 「CodeForces 581D」Three Logos
BUPT 2017 Summer Training (for 16) #3A 题意 给你三个矩形,需要不重叠不留空地组成一个正方形.不存在输出-1,否则输出边长和这个正方形(A,B,C表示三个不同矩形 ...
- 「CodeForces - 50C 」Happy Farm 5 (几何)
BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ...
- 「CodeForces - 598B」Queries on a String
BUPT 2017 summer training (for 16) #1I 题意 字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插 ...
- 「CodeForces - 717E」Paint it really, really dark gray (dfs)
BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...
- 「CodeForces 546B」Soldier and Badges 解题报告
CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...
- 「Codeforces 79D」Password
Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...
- 「Codeforces 724F」Uniformly Branched Trees
题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...
- 「codeforces - 1284G」Seollal
给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图.保证 \((1, 1)\) 无障碍,保证无障碍格子连通. 将网格图黑白染色,相邻格子颜色不同,\((1, ...
随机推荐
- C语言中不用 + 和 - 求两个数之和
(二)解题 题目大意:不用+或者-实现两个整数的加法 解题思路:不用+或者-,就自然想到位运算,无非就是与或非来实现二进制的加法 首先,我们来看一位二进制的加法和异或运算 A B A&B A^ ...
- 【leetcode】153. Find Minimum in Rotated Sorted Array
Suppose an array of length n sorted in ascending order is rotated between 1 and n times. For example ...
- C++ 数字分类
1012 数字分类 (20分) 输入格式: 每个输入包含 1 个测试用例.每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数.数字间 ...
- Output of C++ Program | Set 14
Predict the output of following C++ program. Difficulty Level: Rookie Question 1 1 #include <iost ...
- Linux:$i 和 ${i}区别
例如你要把有个变量的值和其他字符串连接起来,就需要用到{},以明示{}中的是一个变量. 例如: export var1=ABC export var2=var1=${var1} echo $var2 ...
- 【编程思想】【设计模式】【行为模式Behavioral】chain
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/chain.py #!/usr/bin/env pytho ...
- 【Service】【Database】【Cache】Redis
1. 简介: 1.1. redis == REmote DIctionary Server 1.2. KV cache and store, in-memory, 持久化,主从(sentinel实现一 ...
- 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
- Nginx配置缓存
目录 一.简介 二.配置 三.其它参数 忽略Cache-Control头部 缓存post请求 缓存动态内容 使用Cookie作为缓存键的一部分 手动清理缓存 支持断点续传 设置查看缓存命中与否 一.简 ...
- Mybatis中原生DAO实现和Mapper动态代理实现
Mybatis开发dao的方法通常用两种,一种是传统DAO的方法,另一种是基于mapper代理的方法. 一.传统DAO方式开发 1.sql语句映射文件编写 User.xml <?xml vers ...