Portal --> arc075_f

Solution

​   一开始抱着“我有信仰爆搜就可以过”的心态写了一个爆搜。。

​   但是因为。。剪枝和枚举方式不够优秀愉快T掉了qwq

​​   正解还是dp。。对我已经不会dp了qwq

​  

​​   首先我们可以写成一个熟悉的小学奥数形式:

​​   然后比较容易注意到,确定了\(e\)代表的数值,就确定了\(a\)代表的数值(中间的那堆方框是已知的东西就是\(D\))其他类似,也就是说我们可以对称着确定数值

​​   但是这里有一个东西比较的。。麻烦。。就是进位

​​   当然我们可以写一个爆搜暴力枚举一半然后中途剪枝通过进位之类的东西判断,但实际上注意到这个其实可以看成一个“两边向中间推进的过程”,根本没有必要爆搜,我们可以dp处理

​​   记\(f[i][j][k]\)表示,我们现在已经确定了前\(i\)位,第\(i+1\)位应该贡献给第\(i\)位的进位为\(j\),第\(n-i+1\)位应该贡献给\(n-i\)位的进位为\(k\),然后枚举范围的话就是\(i\in [1,\lfloor\frac{n}{2}\rfloor]\),\(j\)和\(k\)都\(\in \{0,1\}\)

​​   然后就直接枚举第\(i+1\)位上的数字,然后算出对称过去的数字,自然也就可以算出新的贡献出的进位,然后就直接转移就好了

​​   最后计算答案的时候,要分位数\(n\)为奇数或偶数两种情况讨论,主要就是因为。。如果是奇数的话中间会多一位,然后这位前后都不能有进位,偶数的话只要前后进位贡献相同就好了

​  

​​   代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=30;
int f[N][2][2],d[N];
int n,m,D;
ll ans;
void prework(int D){
d[0]=0;
while (D){
d[++d[0]]=D%10;
D/=10;
}
}
ll solve(int n1){
int n=n1/2,j1,k1,tmp,sum,mid;
ll ret=0;
for (int i=0;i<=n;++i)
for (int j=0;j<2;++j)
for (int k=0;k<2;++k)
f[i][j][k]=0;
f[0][0][0]=1;
for (int i=0;i<n;++i){
for (int j=0;j<2;++j)
for (int k=0;k<2;++k){
if (f[i][j][k]==0) continue;
for (int num=0;num<=9;++num){
sum=num+d[i+1]+k;
tmp=sum%10; k1=sum/10;
j1=(j*10+num)-(tmp+d[n1-i]);
if (j1<0||j1>1) continue;
if (!i&&(!num||!tmp)) continue;
f[i+1][j1][k1]+=f[i][j][k];
}
}
}
if (n1%2==1){
mid=(n1+1)/2;
for (int j=0;j<2;++j)
for (int k=0;k<2;++k){
if (!f[n][j][k]) continue;
for (int num=0;num<=9;++num){
sum=num+d[mid]+k;
if (sum%10==num&&sum/10==j)
ret+=f[n][j][k];
}
}
}
else
for (int j=0;j<2;++j)
ret+=f[n][j][j];
return ret;
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d",&D);
prework(D);
for (int i=d[0];i<=d[0]*2;++i)
ans+=solve(i);
printf("%lld\n",ans);
}

【arc075F】Mirrored的更多相关文章

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

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

  2. 【arc075f】AtCoder Regular Contest 075 F - Mirrored

    题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...

  3. 【ARC075F】Mirror

    Description ​ 给定正整数\(D\),求有多少个正整数\(N\),满足\(rev(N)=N+D\). ​ 其中\(rev(N)\)表示将\(N\)的十进制表示翻转来读得到的数(翻转后忽略前 ...

  4. 【Linux】-NO.7.Linux.3.Maven.1.001-【CentOS 7 Install Maven 3.5】-

    1.0.0 Summary Tittle:[Linux]-NO.7.Linux.3.Maven.1.001-[CentOS 7 Install Maven 3.5]- Style:Linux Seri ...

  5. 【wpf】在win10系统上弹出toast和notification

    原文:[wpf]在win10系统上弹出toast和notification 老规矩,先看效果 右下角的notification: 操作中心的notification: 整体效果: 前提条件 1.需要在 ...

  6. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  7. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  8. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

随机推荐

  1. MantisBT导出Excel文件名显示中文的修改方法

    我安装的是 mantisbt-2.15.0. 在“查看问题”页面导出Excel文件后,其文件名虽然是我选择的项目名称,但是,若项目名称中有中文,这就是用%加编码显示. 解决方法是: 在  <Ma ...

  2. 03-运行第一个docker容器

    环境选择 容器需要管理工具.runtime 和操作系统,我们的选择如下: 1.管理工具 - Docker Engine因为 Docker 最流行使用最广泛. 2.runtime - runc Dock ...

  3. Vue学习计划基础笔记(一) - vue实例

    最近又重新看vue的文档了,计划是别人写的,之前看过一次,没有考虑太多,只考虑看懂能用就好.看完之后写过写demo,现在是零实际项目经验的,所以这一次打算细看,算是官方文档的二次产物吧,但是不是全部直 ...

  4. web _service 接口

    1.WebService 就是 http请求    post接口 2.需要加 请求头信息 Content-Type: text/xml; 3.需要把占位符换成需要的字符串 webservice接口可以 ...

  5. 使用Mininet创建网络拓扑

    使用Mininet创建Topo Python脚本实现创建拓扑 #coding:utf-8 from mininet.net import Mininet from mininet.topo impor ...

  6. Spark Streaming的使用——转载

    转载自   Spark Streaming 使用

  7. java面向对象的栈 队列 优先级队列的比较

    栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一 ...

  8. 关于XML文档操作类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  9. 第二篇-bmob云端服务器的发现

    最近认识了一个Bmob云端服务器,使用它提供的API可以轻松地完成与数据库(bmob)的交互,使开发更加专注于功能的实现. 这很方便对js的学习,完全可以利用前端三板斧来搭建一个网站,并且初步实现简单 ...

  10. 【第二周】Java实现英语文章词频统计(改进1)

    本周根据杨老师的spec对英语文章词频统计进行了改进 1.需求分析: 对英文文章中的英文单词进行词频统计并按照有大到小的顺序输出, 2.算法思想: (1)构建一个类用于存放英文单词及其出现的次数 cl ...