hdu 5109 Alexandra and A*B Problem
来源:互联网 发布:dota2数据查询 编辑:程序博客网 时间:2024/05/17 20:15
思路:做题的时候完全没思路。。。。看了题解才有。。。说说我的理解。。
串S是串T的子串,串T应该就是xSy的形式,x接在S前,y接在S后,构成了串T。A*B=T,设S的长度为p,y的长度为q,则A*B=(x*10^p+S)*10^q+y。
T%A=0,即((x*10^p+S)*10^q+y)%A=0,对于x的范围,可以通过取模运算缩小到[0~a),如果S的开头为0的话,则x的范围是[1~a-1],在这个范围内枚举x,然后枚举y的长度,就可以得到x和y,然后找到满足条件的最小的就好了。
T/A就是结果了
因为y也是在[0~a)这个范围,所以y的长度范围是0~4,y长度是0的时候,y<1,y长度是1的时候,y<10……….一直到y<10000,都是符合条件的y。
#include <cstdio>#include <cstring>typedef long long ll;char str[10];ll a;ll pow(ll a, ll b){ ll res = 1; while(b) { if(b&1) res *= a; a *= a; b >>= 1; } return res;}int main(){ ll p; ll pre,s; while(scanf("%I64d %s",&a,str) != EOF) { p = strlen(str); if(str[0] == '0' && p == 1) { printf("0\n"); continue; } sscanf(str,"%I64d",&s); p = pow(10,p); ll ans = -1; for(int y = 1; y <= 10000; y*=10) { for(int x = (str[0] == '0'); x < 10000; ++x) { pre = (x*p+s)*y; ll mod = (a-pre%a)%a; if(mod < y) { pre += mod; if(ans < 0 || pre < ans) ans = pre; } } } printf("%I64d\n",ans/a); } return 0;}
0 0
- HDU 5109 Alexandra and A*B Problem
- hdu 5109 Alexandra and A*B Problem
- hdu 5109 Alexandra and A*B Problem
- Hdu 5109 Alexandra and A*B Problem(枚举)
- hdu 5109 Alexandra and A*B Problem(取模,枚举,数学数论)
- 【BestCoder】 HDOJ 5109 Alexandra and A*B Problem
- HDU5109 Alexandra and A*B Problem(数学题)
- hdu 3819 A and B problem
- HDU-3819-A and B Problem
- HDU 3819 A and B Problem
- hdu A + B problem
- HDU 3819 A and B Problem 对字符串进行处理
- HDUOJAlexandra and A*B Problem
- 【CUGBACM15级BC第19场 A】hdu 5108 Alexandra and Prime Numbers
- HDU-#5108 Alexandra and Prime Numbers
- hdu 5110 Alexandra and COS 压线飘过
- 【HDU】5110 Alexandra and COS 分块处理
- HDU 5108 Alexandra and Prime Numbers
- Kali密码攻击之——离线攻击工具
- 安装 CocoaPods和使用步骤(以高德为例)
- BZOJ 1303: [CQOI2009]中位数图 计数,思维
- 120. Triangle
- Redis之sorted sets类型及操作
- hdu 5109 Alexandra and A*B Problem
- code[vs] 1044拦截导弹(最长递减+递增子序列)
- CMOS摄像头之硬件原理
- Vim插件之limelight和goyo
- 输出图案(三)-----输出正弦曲线:(难度系数:1颗星)
- 不挂科第一篇 C++函数实参传递
- 第九周
- 菜鸟的Linux学习史——第七章 Gcc
- Linux入门Day1