题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d

题意:求rev(N)=N+D的个数,rev表示取反。例如rev(123)=321

题解:具体看一下代码,这题需要思考一下,虽然是简单的dfs但是不好想到。

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
ll Power[20];
ll dfs(ll l , ll r , ll d) {
if(l >= r) {
if(d == 0) return l == r ? 10 : 1;
return 0;
}
if(d % 10 == 0) {
if(l != 1) return 10 * dfs(l + 1 , r - 1 , d / 10);
return 9 * dfs(l + 1 , r - 1 , d / 10);
}
ll differ = d % 10 - 10;//选取的数一定要使l位进1否则取反之后的必定小与改数,那么显然不可能。所以differ是d % 10 - 10
ll next = d - differ + differ * Power[r - l];//这里先让d进一位,然后由于对称性,r位+differ=l位+differ所以选择+ differ * Power[r - l],这样才能满足对称条件
if(l == 1) return (9 + differ) * dfs(l + 1 , r - 1 , abs(next) / 10);
return (10 + differ) * dfs(l + 1 , r - 1 , abs(next) / 10);
}
int main() {
ll d;
cin >> d;
Power[0] = 1;
for(int i = 1 ; i <= 18 ; i++) {
Power[i] = Power[i - 1] * 10;
}
ll ans = 0;
for(int i = 2 ; i <= 18 ; i++) {
ans += dfs(1 , i , d);
}//这里选择18位由于原来的数也就最多9位,如果取得数位数是两倍的话显然是不可能的。
cout << ans << endl;
return 0;
}

最新文章

  1. Bubble Cup 8 finals E. Spectator Riots (575E)
  2. uva1262
  3. nginx secure_link下载防盗链
  4. 单片机中断的IE和IP寄存器(摘抄)
  5. Mvc设计模型与三层架构
  6. 【python】二进制、八进制、十六进制表示方法(3.0以上)
  7. [BZOJ 1907] 树的路径覆盖 【树形DP】
  8. 机器学习之python: kNN
  9. 蓝牙Profile的概念和常见种类
  10. Struts中的数据处理的三种方式
  11. 开启新模式WinForm
  12. Java-高效地使用Exception-实践
  13. C#删除字符串最后一个字符
  14. MySQL数据库视图(view),视图定义、创建视图、修改视图
  15. 【Zookeeper系列】构建ZooKeeper应用(转)
  16. DOM中表格的操作方法总结
  17. spark streaming的有状态例子
  18. 【读书笔记】iOS-应用程序剖析
  19. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境
  20. sparse representation 与sparse coding 的区别的观点

热门文章

  1. [系列] Go - chan 通道
  2. 干货来了!python学习之重难点整理合辑1
  3. 给最近正在找工作(iOS)的朋友一些建议/经验
  4. 1.Go语言copy函数、sort排序、双向链表、list操作和双向循环链表
  5. Unity经典游戏教程之:冒险岛
  6. git常用指令整理
  7. 全屏滚动插件pagePiling.js
  8. 不得不会的10点Java基础知识
  9. Ubuntu下安装php7.1的gd,mysql,pdo_mysql扩展库
  10. Go-cron定时任务