HDU 5710 Digit-Sum 数学杂题
来源:互联网 发布:财务报账系统 php 编辑:程序博客网 时间:2024/06/07 07:38
原题见HDU 5710
题意:定义
分析:S(n)与S(2n) 的关系如何?
对于n中的任何一个数位x,若x为0-4,则因为没有进位,所以在S(2n)中贡献为2x;若x为5-9,则由于其超过10,在S(2n)中贡献为2x-10+1.这里不用担心因为进位会使得高位又满10进位,事实上前一位最多为2*9=18或者是单纯的8,不可能出现9.
可见只有5~9的位数使
1. a=2b,则L=0,S为任意值。可得最小的n=1;
2. a>2b,则L<0,矛盾!则无满足的n,输出0;
3. a<2b,
继续讨论上述第三种情况,由于分母为2b-a,L周期性地使得右边式子可以整除,现在只要求出最小的L,枚举范围从1到2b-a必定会有满足的L。
得到一组满足的(L,S),构造最小的n。首先先要在后L位塞满5,剩下的(S-5L)开始从个位到高位塞4,直到塞完为止。
讨论:L与n的关系?
问题来了,既然L可以取多个,怎么保证最小的L使得n最小?
假设L’=L+x,
原来的位数(大约)是(除以4的地方应该加个向上取整)
现在的位数是
后面减前面,差值是
附代码
/*-------------------------------------------- * File Name: HDU 5710 * Author: Danliwoo * Mail: Danliwoo@outlook.com * Created Time: 2016-07-05 17:09:58--------------------------------------------*/#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <cmath>using namespace std;#define N 1000int ans[N], a, b;void solve(){ if(a == 2*b){ printf("1\n"); return; } if(a > 2*b || 5*a < b){ printf("0\n"); return; } int L, S; for(L = 1;L < 1000;L++){ S = 9*b*L/(2*b-a); if((2*b-a)*S == 9*b*L) break; } memset(ans, 0, sizeof(ans)); for(int i = 0;i < L;i++) ans[i] = 5; S -= L*5; int len; for(int i = 0;;i++){ if(S > 4){ ans[i] += 4; S -= 4; } else { ans[i] += S; S = 0; len = i+1; break; } } len = max(len, L); for(int i = len-1;i >= 0;i--) printf("%d", ans[i]); printf("\n");}int main(){ int T; scanf("%d", &T); while(T--){ scanf("%d%d", &a, &b); solve(); }}
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
- HDU 1060 Leftmost Digit(数学)
- HDU 1060:Leftmost Digit【数学】
- HDU 1060 Leftmost Digit(数学)
- HDU - 1061 Rightmost Digit(数学)
- HDU:1060 Leftmost Digit(数学)(水)
- HDU 5776 sum(数学)
- 5710 Digit-Sum(找规律)
- HDU 1061 Rightmost Digit (数学&三种解法)
- HDU - 1060 Leftmost Digit (数学取对数)规律
- HDU - 1061 Rightmost Digit (数学打表)规律
- java 产生指定范围的随机数
- Go语言圣经(中文版)读书笔记
- redis缓存数据需要指定缓存有效时间范围段的多个解决方案 Calendar+quartz
- eclipse最有用快捷键整理
- 关于Java Final 修饰的局部变量,多线程可以访问
- HDU 5710 Digit-Sum 数学杂题
- DevExpress GridControl使用
- Oracle处理CLOB超过4000入库问题 (2)
- 3.3 DXC简介——HANA数据抽取和同步
- 【待重置】记忆化搜索思想
- MapReduce 2.0应用场景、原理与基本架构
- 大话设计模式c++实现--简单工程模型
- 新生练习1(递推)
- opencv中的侧脸检测