HDU 5710 Digit-Sum
来源:互联网 发布:c语言智能五子棋游戏 编辑:程序博客网 时间:2024/05/20 18:42
5*2=10,S(5*2)=1,2*S(5)=10;
6*2=12,S(6*2)=3,2*S(6)=12;
7*2=14,S(7*2)=5,2*S(7)=14;
8*2=16,S(8*2)=7,2*S(8)=16;
9*2=18,S(9*2)=9,2*S(9)=18;
规律显然,其实就是满十进1,每位数字之和便小了9。
假设n里有L位数为5-9,那么显然满足:S(2n)=S(n)*2-L*9
那么a*S(n) == b*(2S(n)-L*9)
化简:(2b-a)*S(n) == 9*L*b
关键:9*b:2b-a = S(n):L
到此可以推出三个结论
if (L==0) {printf ("1\n"); continue;} //L=0时,S(2)=2*S(1)
if (L<0) {printf ("0\n"); continue;} //(2b-a)*S(n) == 9*L*b,L不可能小于0
if (5*L>S) {printf ("0\n"); continue;} //假设就是5-9部分有L位,如果最小的5乘以L都会爆,那么不符合假设
#include<stdio.h>#include<iostream>#include<math.h>#include<string.h>#include<iomanip>#include<stdlib.h>#include<ctype.h>#include<algorithm>#include<deque>#include<functional>#include<iterator>#include<vector>#include<list>#include<map>#include<queue>#include<set>#include<stack>#include<sstream>#define CPY(A, B) memcpy(A, B, sizeof(A))typedef long long LL;typedef unsigned long long uLL;const int MOD = 1e9 + 7;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f3f3f3f3f3f3fLL;const double EPS = 1e-9;const double OO = 1e20;const double PI = acos (-1.0);int dx[]= {0,1,0,-1};int dy[]= {1,0,-1,0};int gcd (const LL &a, const LL &b) {return b==0?a:gcd (b,a%b);}using namespace std;int ans[5000];int main() { int T,a,b; scanf ("%d",&T); while (T--) { scanf ("%d%d",&a,&b); int L=2*b-a; int S=9*b; //(2b-a)*S(n) == 9*L*b if (L<0) {printf ("0\n"); continue;} if (5*L>S) {printf ("0\n"); continue;} if (L==0) {printf ("1\n"); continue;} int g=gcd (L,S); L/=g; S/=g; //因为化简到最后是比值形式,所以同除最大公约数,到达最小 int bitcnt=0; S-=5*L; //总和减掉555...5 之后,剩的那部分数字之和 for (int i=0; i<L; ++i) { int mod=min (4,S);//从个位开始,使5变成9,这样能使9尽可能减小 S-=mod; ans[bitcnt++]=5+mod; } //如果L位都是9,结果还有剩余,那么高位从4开始往前填写 while (S) { int oth=min (4,S);//5-9 is used,就假设L位数为5-9,剩的肯定是1-4啊 ans[bitcnt++]=oth; S-=oth; } for (int i=bitcnt-1; i>=0; --i) { printf ("%d",ans[i]);//逆序输出即可 } puts (""); } return 0;}
0 0
- HDU 5710 Digit-Sum
- HDU 5710 Digit-Sum
- HDU 5710 Digit-Sum
- [HDU 5710]Digit-Sum:其他
- Hdu 5710 Digit-Sum【思维】
- HDU 5710 Digit-Sum 数学杂题
- HDU 5710 Digit-Sum (构造)
- Digit-Sum HDU
- 5710 Digit-Sum(找规律)
- lucky sum of digit
- [projecteuler]Factorial digit sum
- Sicily 7969. Digit Sum
- HDU5710-Digit-Sum
- UVALive6497 Digit Sum【贪心】
- cc Minimal Weighted Digit Sum
- Problem 16:Power digit sum
- Problem 20:Factorial digit sum
- Problem 16:Power digit sum
- Vim快速移动光标
- DRLogistics项目开发记(序 起于维谷,兴于乱世,终于一统)
- Eclipse错误:找不到或无法加载主类
- 经验如何提高PHP执行效率的50个技巧
- HDU5763 Another Meaning动态规划
- HDU 5710 Digit-Sum
- iOS线程和进程的区别和联系
- 多线程的作用和实现方法
- codeforces-Powers of Two(map的应用)
- LightOJ1129->动态Trie树
- 在Windows下为PHP5.5安装redis扩展
- 百练 2624 4th Point .
- 三字棋小游戏
- svo简单探讨1