假设$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的更多相关文章

  1. 最长回文子串(Mirrored String II)

    Note: this is a harder version of Mirrored string I. The gorillas have recently discovered that the ...

  2. [AtCoderContest075F]Mirrored

    [AtCoderContest075F]Mirrored 试题描述 For a positive integer \(n\), we denote the integer obtained by re ...

  3. Consistent 与 Mirrored 视角

    Consistent 与 Mirrored 视角 在进行分布式训练时,OneFlow 框架提供了两种角度看待数据与模型的关系,被称作 consistent 视角与 mirrored 视角. 本文将介绍 ...

  4. CentOS RabbitMQ 高可用(Mirrored)

    原文:https://www.sunjianhua.cn/archives/centos-rabbitmq.html 一.RabbitMQ 单节点 1.1.Windows 版安装配置 1.1.1 安装 ...

  5. 【arc075F】Mirrored

    Portal --> arc075_f Solution ​  一开始抱着"我有信仰爆搜就可以过"的心态写了一个爆搜.. ​  但是因为..剪枝和枚举方式不够优秀愉快T掉了q ...

  6. 【ARC075F】Mirrored 搜索/数位dp

    Description ​ 给定正整数DD,求有多少个正整数NN,满足rev(N)=N+Drev(N)=N+D,其中rev(N)rev(N)表示将NN的十进制表示翻转来读得到的数 Input ​ 一个 ...

  7. ARC075 F.Mirrored

    题目大意:给定D,询问有多少个数,它的翻转减去它本身等于D 题解做法很无脑,利用的是2^(L/2)的dfs,妥妥超时 于是找到了一种神奇的做法. #include <iostream> u ...

  8. AT2582 Mirrored

    传送门 智障爆搜题 可以发现题目给出的式子可以移项 然后就是\(rev(N)-N=D\) 然后假设\(N=a_1*10^{n-1}+a_2*10^{n-2}+...+a_{n}\) 那么\(rev(N ...

  9. Atcoder F - Mirrored(思维+搜索)

    题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...

随机推荐

  1. Salesforce 生命周期管理(一)应用生命周期浅谈

    本篇参考: https://trailhead.salesforce.com/en/content/learn/trails/determine-which-application-lifecycle ...

  2. Upload-labs通关指南(下) 11-20

    承接上篇,这次我们继续做下半部分. 有些题目有其他做法是针对于windows系统特性的,并不能在linux上奏效,因此不在考虑范围之内. Pass-11 制作图片马直接上传 copy a.jpg /a ...

  3. 036—环境变量path

    day04 课堂笔记 1.开发第一个java程序:HelloWorld 1.1.程序写完以后,一定要ctrl+s进行保存 源代码若修改,需重新进行编译 1.2.编译阶段 怎么编译?使用什么命令?这个命 ...

  4. shopping cart

    #Author:Kevin_hou #定义产品列表 product_list =[ ('HUAWEI',5999), ('Watch',500), ('Nike',800), ('Toyota',20 ...

  5. ScatterLayout分散布局在kv中的引用

    from kivy.uix.scatterlayout import ScatterLayout from kivy.app import App class ScatterLayoutWidget( ...

  6. 如何接入 K8s 持久化存储?K8s CSI 实现机制浅析

    作者 王成,腾讯云研发工程师,Kubernetes contributor,从事数据库产品容器化.资源管控等工作,关注 Kubernetes.Go.云原生领域. 概述 进入 K8s 的世界,会发现有很 ...

  7. Java:关于 CAS 笔记

    Java:关于 CAS 笔记 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. CAS 底层原理 概念 CAS 的全称是 Compare-And-Swap,它 ...

  8. Python Linux Ubuntu apt安装PyCharm

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  9. 前端面试手写代码——JS函数柯里化

    目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...

  10. Centos 7 编译安装llvm 8.0.0

    参考连接:https://www.cnblogs.com/BinBinStory/p/7499527.html https://blog.csdn.net/llwy1428/article/detai ...