[atARC075F]Mirrored
假设$n=\sum_{i=0}^{k}a_{i}10^{i}$(其中$a_{k}>0$),则有$d=f(n)-n=\sum_{i=0}^{k}(10^{k-i}-10^{i})a_{i}$,考虑$i$和$k-i$,不难化简得到$d=\sum_{i=0}^{\lfloor\frac{k-1}{2}\rfloor}(10^{k-i}-10^{i})(a_{i}-a_{k-i})$
(这里忽略了当$k$为偶数时$a_{\frac{k}{2}}$,因为其系数为0,因此当$k$为偶数时答案可以再乘10)
记$b_{i}=a_{i}-a_{k-i}$后,考虑去统计$b_{i}$,之后再加上对应的$a_{i}$,即$\prod(10-|b_{i}|)$种
从0到$\lfloor\frac{k-1}{2}\rfloor$依次确定$b_{i}$,当要确定$b_{i}$时(即$b_{0..i-1}$都已经确定),考虑$b_{i}$之后的位置所能产生的贡献,不难得到$b_{i}$合法的必要条件为$|d-\sum_{j=0}^{i}(10^{k-j}-10^{j})b_{j}|\le 9\sum_{j=i+1}^{\lfloor\frac{k-1}{2}\rfloor}(10^{k-j}-10^{j})$
又因为$10^{k-i}-10^{i}>9\sum_{j=i+1}^{\lfloor\frac{k-1}{2}\rfloor}(10^{k-j}-10^{j})$,即当左边绝对值内已经是正数时,再增加$b_{i}$一定不合法,类似的负数时不能减少,因此$b_{i}$最多只有两种(恰好为正数或负数)
如果爆搜,对于每一个$k$都有$2^{\lfloor\frac{k-1}{2}\rfloor}$的复杂度,因此考虑确定$k$的范围:
对于$10^{k-i}-10^{i}>9\sum_{j=i+1}^{\lfloor\frac{k-1}{2}\rfloor}(10^{k-j}-10^{j})$这个条件,更精确的,我们在右边再加上$10^{\lceil\frac{k+1}{2}\rceil}$后也是正确的,即$10^{k-i}-10^{i}>9\sum_{j=i+1}^{\lfloor\frac{k}{2}\rfloor}(10^{k-j}-10^{j})+10^{\lceil\frac{k+1}{2}\rceil}$
接下来证明若$d\le 10^{\lceil\frac{k+1}{2}\rceil}-10^{\lfloor\frac{k-1}{2}\rfloor}$,一定无解——
归纳$b_{i}=0$,即当确定$b_{i}$时$b_{0..i-1}=0$,此时来证明$b_{i}=0$
由于$d>0$,因此$b_{i}\le 1$,同时$b_{i}$的系数最小即为$10^{\lceil\frac{k+1}{2}\rceil}-10^{\lfloor\frac{k-1}{2}\rfloor}$,因此$b_{i}\ge -1$
而当$b_{i}=-1$时,$(10^{k-j}-10^{j})-d>9\sum_{j=i+1}^{\lfloor\frac{k}{2}\rfloor}(10^{k-j}-10^{j})+10^{\lceil\frac{k+1}{2}\rceil}-10^{\lceil\frac{k+1}{2}\rceil}$(第一项$10^{\lceil\frac{k+1}{2}\rceil}$是更精确的比较,第二项是$d<10^{\lceil\frac{k+1}{2}\rceil}$),因此即不满足必要条件
当所有$b_{i}=0$时,不难得到$d=0$,即无解,因此有$k\le 18$,总复杂度即为$o(18\cdot 2^{9})$,可以通过
有1个细节:要求$a_{k}>0$,因此若$b_{0}\ge 0$则$b_{0}$的对$a_{i}$贡献系数为$9-b_{0}$
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 21
4 #define ll long long
5 ll n,sum,ans,mi[N];
6 void dfs(int k,int t,ll n,ll tot){
7 if (k>(t-1)/2){
8 if (!n)sum+=tot;
9 return;
10 }
11 ll s=mi[t-k]-mi[k];
12 n+=9*s;
13 for(int i=-9;i<=9;i++){
14 if (abs(n)<s)dfs(k+1,t,n,tot*(10-abs(i)-((!k)&&(i>=0))));
15 n-=s;
16 }
17 }
18 int main(){
19 scanf("%lld",&n);
20 mi[0]=1;
21 for(int i=1;i<=18;i++)mi[i]=mi[i-1]*10;
22 for(int i=1;i<=18;i++){
23 sum=0;
24 dfs(0,i,n,1);
25 if (i%2==0)sum*=10;
26 ans+=sum;
27 }
28 printf("%lld",ans);
29 }
[atARC075F]Mirrored的更多相关文章
- 最长回文子串(Mirrored String II)
Note: this is a harder version of Mirrored string I. The gorillas have recently discovered that the ...
- [AtCoderContest075F]Mirrored
[AtCoderContest075F]Mirrored 试题描述 For a positive integer \(n\), we denote the integer obtained by re ...
- Consistent 与 Mirrored 视角
Consistent 与 Mirrored 视角 在进行分布式训练时,OneFlow 框架提供了两种角度看待数据与模型的关系,被称作 consistent 视角与 mirrored 视角. 本文将介绍 ...
- CentOS RabbitMQ 高可用(Mirrored)
原文:https://www.sunjianhua.cn/archives/centos-rabbitmq.html 一.RabbitMQ 单节点 1.1.Windows 版安装配置 1.1.1 安装 ...
- 【arc075F】Mirrored
Portal --> arc075_f Solution 一开始抱着"我有信仰爆搜就可以过"的心态写了一个爆搜.. 但是因为..剪枝和枚举方式不够优秀愉快T掉了q ...
- 【ARC075F】Mirrored 搜索/数位dp
Description 给定正整数DD,求有多少个正整数NN,满足rev(N)=N+Drev(N)=N+D,其中rev(N)rev(N)表示将NN的十进制表示翻转来读得到的数 Input 一个 ...
- ARC075 F.Mirrored
题目大意:给定D,询问有多少个数,它的翻转减去它本身等于D 题解做法很无脑,利用的是2^(L/2)的dfs,妥妥超时 于是找到了一种神奇的做法. #include <iostream> u ...
- AT2582 Mirrored
传送门 智障爆搜题 可以发现题目给出的式子可以移项 然后就是\(rev(N)-N=D\) 然后假设\(N=a_1*10^{n-1}+a_2*10^{n-2}+...+a_{n}\) 那么\(rev(N ...
- Atcoder F - Mirrored(思维+搜索)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...
随机推荐
- 阿里 Midway 正式发布 Serverless v1.0,研发提效 50%
Github:https://github.com/midwayjs/midway 开源为了前端和 Node.js 的发展,点 Star! 去年阿里提出 Serverless 架构,并利用其新一代研发 ...
- 【NOIP1998】 三连击 题解
文章转载前需和原作者联系,否则追究法律责任 题目链接:https://www.luogu.com.cn/problem/P1008 首先我们来分析一下题目.要求是枚举三个数,比例为1:2:3,且各个数 ...
- C#并行编程:Parallel的使用
前言:在C#的System.Threading.Tasks 命名空间中有一个静态的并行类:Parallel,封装了Task的使用,对于执行大量任务提供了非常简便的操作.下面对他的使用进行介绍. 本篇内 ...
- 图解java 多线程模式 读书笔记
第1章"Single Threaded Execution模式--能通过这座桥的只有一个人" 该模式可以确保执行处理的线程只能是一个,这样就可以有效防止实例不一致. 第⒉章&quo ...
- pip 安装软件报 Requirement already satisfied
pip 安装的时候报错了,以为是豆瓣源有问题,换了还是一样,于是我们只需要加入一个参数 --target=路径 给它一个指定的位置就可以解决这个问题 安装位置不变,只是增加了一个参数在后面
- 4.14——208. 实现 Trie (前缀树)
前缀树(字典树)是经典的数据结构,以下图所示: 本来处理每个节点的子节点集合需要用到set,但是因为输入规定了只有26个小写字母,可以直接用一个[26]的数组来存储. 关于ASCII代码: Java ...
- (课内)信安数基RSA-level3-5
emmmm感觉其实自己对这个的理解完全不够,原理只能写出这么个东西(悲) 代码完全是 攻击方式中(1)(2)内容的实现. lambda是一种可以理解为匿名函数的写法:写在这里看起来很酷炫(bushi) ...
- Java:多线程计数
Java:多线程计数 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 ...
- 色彩滤镜矩阵(Color Filter Array)
数码相机上的每个象素都带有一个光感应器,用以测量光线的明亮程度.由于光电二极管是只支持单颜色的装置,它不能区别不同波长的光线.因此,数码相机工程师在相机感应器的上部装上了一套镶嵌式的颜色滤镜,一个颜色 ...
- 华为HG255D挂卡中继专用旋风科技固件
正的挂卡不掉线不掉速,稳定上网看上去好像很NB的样子 挂卡设置教程:http://picimg.lshou.com/pic/clou ... /6/t/1/30247515.mp4 固件链接: htt ...