[arc075f]Mirrored
来源:互联网 发布:魔笛 知乎 编辑:程序博客网 时间:2024/06/05 22:33
题目大意
rev(n)为n翻转后的十进制数(从第一个非0位往后翻转)。
有多少n满足rev(n)=n+d。
做法
如果d末尾有0,显然那几位可以任意填(只要不造成前导0),先剔除掉。
然后就可以暴力枚举一半的数字并判断。
#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;int a[20],b[20],ten[9];int d;int i,j,k,l,t,n,m,tot,top;ll num,sum,wdc,pp,ans;bool czy;int main(){ ten[0]=1; fo(i,1,8) ten[i]=ten[i-1]*10; scanf("%d",&d); pp=1; if (d%10==0){ czy=1; while (d%10==0){ d/=10; pp*=10; } pp=pp/10*9; } fo(l,1,7) fo(i,0,ten[l]-1){ t=0; k=i; top=0; fo(j,1,l){ a[++top]=k%10; k/=10; } k=i+d; tot=0; fo(j,1,top){ b[++tot]=k%10; k/=10; } if (!czy&&b[1]==0) continue; reverse(b+1,b+tot+1); fo(j,1,tot) a[++top]=b[j]; num=0; wdc=1; fo(j,1,top){ num+=(ll)a[j]*wdc; wdc*=10; } sum=0; wdc=1; reverse(a+1,a+top+1); fo(j,1,top){ sum+=(ll)a[j]*wdc; wdc*=10; } if (num+(ll)d==sum){ ans++; } //continue; reverse(a+1,a+top+1); top-=tot; a[++top]=0; fo(j,1,tot) a[++top]=b[j]; num=0; wdc=1; fo(j,1,top){ num+=(ll)a[j]*wdc; wdc*=10; } sum=0; wdc=1; reverse(a+1,a+top+1); fo(j,1,top){ sum+=(ll)a[j]*wdc; wdc*=10; } if (num+(ll)d==sum){ ans+=10; } } ans*=pp; printf("%lld\n",ans);}
阅读全文
0 0
- [arc075f]Mirrored
- Mirrored String I Gym
- Mirrored String II Gym
- Highly Available (Mirrored) Queues
- Highly Available (Mirrored) Queues
- [Erlang 0090] RabbitMQ 集群: Mirrored Queue
- Mirrored String II 【最长回文子串】
- Using Android's TextureView to Display Video Mirrored
- Codeforces 887A Div. 64
- redis主从复制
- 100以内的素数
- Qt 之 QtConcurrent
- 近似算法之旅行商问题
- [arc075f]Mirrored
- 1000之内的所有完数
- 验证码
- 数据结构:不带头结点的单链表
- 16、Oracle中的日期类型
- 当前深度神经网络模型压缩和加速方法速览
- 假如时光倒流,我会这么学习Java
- 冰点文库、百度文库文档免费下载软件
- 聊聊epoll的水平触发和边缘触发