【arc075F】Mirrored
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的更多相关文章
- 【ARC075F】Mirrored 搜索/数位dp
Description 给定正整数DD,求有多少个正整数NN,满足rev(N)=N+Drev(N)=N+D,其中rev(N)rev(N)表示将NN的十进制表示翻转来读得到的数 Input 一个 ...
- 【arc075f】AtCoder Regular Contest 075 F - Mirrored
题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...
- 【ARC075F】Mirror
Description 给定正整数\(D\),求有多少个正整数\(N\),满足\(rev(N)=N+D\). 其中\(rev(N)\)表示将\(N\)的十进制表示翻转来读得到的数(翻转后忽略前 ...
- 【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 ...
- 【wpf】在win10系统上弹出toast和notification
原文:[wpf]在win10系统上弹出toast和notification 老规矩,先看效果 右下角的notification: 操作中心的notification: 整体效果: 前提条件 1.需要在 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
随机推荐
- dbtool一bug跟踪记
注:这篇日志是好多年前,我还在从兴公司时写的.现在都从从兴公司离职很久了,从兴也没落了,可惜.看了一下,虽然出现了部分代码,但不至于泄漏什么机密,查bug过程的原理也有可以让新手借鉴的地方,就原文照搬 ...
- Python接口测试实战1(下)- 接口测试工具的使用
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Scrapy爬去哪儿~上海一日游门票并存入MongoDB数据库
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZwAAAGGCAYAAABPDDfEAAAgAElEQVR4nOy9C3Rb1Z3/+z1Hkm35mT
- Siki_Unity_3-8_Lua编程(未完)
Unity 3-8 Lua编程 任务1&2&3:前言 课程内容: Lua从入门到掌握 为之后的xLua和其他热更新方案打下基础 任务4:Lua简介 Lua是轻量小巧的脚本语言--无需编 ...
- Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP
题目: 给定n(1≤n≤24)个物品,重量分别为wi,装进一些容量为S(S<1e8)的背包,最少需要多少个背包?
- 集合set、map、list
一.set 无序.可重复 public static void main(String[] args){ Set<String> set=new HashSet<String> ...
- leetcode个人题解——#33 Search in Rotated Sorted Array
思路:每次取中间元素,一定有一半有序,另一半部分有序,有序的部分进行二分查找,部分有序的部分递归继续处理. class Solution { public: ; int middleSearch(in ...
- LAMP 系统服务搭建过程详解
LAMP 架构在企业里用得非常广泛,目前很多电商公司.游戏公司.移动互联网公司大多都采用这种架构.LAMP指的是Linux.Apache.MySQL.PHP.下面记录了 LAMP 架构系统服务的搭建过 ...
- Win2019 + Oracle18c SQLPLUS 命令行出现乱码的解决
1. Win2019 中文版 安装了 Oracle数据库, dbca 建库时选择的 的字符集是 ZHS16GBK 然后发现使用sqlplus 时有乱码的现象如图示: 2. csdn 上面有一个博客有解 ...
- Q3 大型科技公司季报
1. alphabet Alphabet(谷歌母公司)今天发布了截至9月30日的2018财年第三季度财报.报告显示,Alphabet第三季度总营收为337.40亿美元,比上年同期的277.72亿美元增 ...