HDU 5710 Digit-Sum (构造)
题意:
定义S(N) 为数字N每个位上数字的和。
在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n)。
官方题解:
这道题目的结果可能非常大,所以我们直接枚举n是要GG的。
首先可以有这样的基础性结论:
设gcd(a,b)=g, 我们可以先使得b=b/g, a=a/g
S(n):S(2n)==b:a,那么我们有S(n):S(2n)=b:a。
然后,一个好的做法是,我们研究本质问题。
我们发现,如果一个digit是0~4,那么*2的效益是完全获得的。
如果一个digit的是5~9,那么*2后会损失9的收益。
a*S(n) == b*S(2n),
我们假设有l的长度是[0,4]范围,有L的长度是[5,9]范围
那么显然满足:
S(2n)=S(n)*2-L*9
替换一下——
a*S(n) == b*(2S(n)-L*9)
a*S(n) == 2b*S(n) -L*9*b
(2b-a)*S(n) == L*9*b
即——
9*b:2b-a = S(n):L
也就是说,我们得到了S(n)与L的比例关系。
然后模拟一遍即可。
怎么模拟呢?
我们不妨假设答案n仅有长度为L,且每一位都是5
然后得到了把数位和sum分撒出去。
对于sum余下的数值,我们依次加到尾巴上。
如果sum最后把长度为L的字串都填充为'9'之后,还有剩余,那么在前面贪心填充。
构造题一般是找规律。找到了就恍然大悟了,找不到就……我靠这题怎么这么难!
做题要大胆,细心。
代码:
#include <iostream> using namespace std; // a*s(n)=b*s(2n)
// a*s(n)=b*( 2*s(n)-9*l )
// (a-b*2)*s(n)=-b*9*l
// (b*2-a)/b*9=l/s(n) int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int ans[];
int main()
{
int T;
cin >> T;
while (T--) {
int a, b;
cin >> a >> b;
int l = b * - a;
int sn = b * ;
if ( * l > sn || l < ) {
cout << "" << endl;
continue;
}
if (l == ) {
cout << "" << endl;
continue;
}
int gg = gcd(l, sn);
l /= gg; sn /= gg;
int idx = ;
sn -= * l;
for (int i = ; i < l; ++i) {
int add = min(, sn);
sn -= add;
ans[idx++] = + add;
}
while (sn) {
int res = min(, sn);
ans[idx++] = res;
sn -= res;
}
for (int i = idx-; i >= ; --i) cout << ans[i];
cout << endl;
}
return ;
}
HDU 5710 Digit-Sum (构造)的更多相关文章
- HDU 5710 Digit Sum
Let S(N)S(N) be digit-sum of NN, i.e S(109)=10,S(6)=6S(109)=10,S(6)=6. If two positive integers a,ba ...
- hdu 4961 Boring Sum(高效)
pid=4961" target="_blank" style="">题目链接:hdu 4961 Boring Sum 题目大意:给定ai数组; ...
- HDU 1024 Max Sum Plus Plus --- dp+滚动数组
HDU 1024 题目大意:给定m和n以及n个数,求n个数的m个连续子系列的最大值,要求子序列不想交. 解题思路:<1>动态规划,定义状态dp[i][j]表示序列前j个数的i段子序列的值, ...
- HDU 1003 Max Sum --- 经典DP
HDU 1003 相关链接 HDU 1231题解 题目大意:给定序列个数n及n个数,求该序列的最大连续子序列的和,要求输出最大连续子序列的和以及子序列的首位位置 解题思路:经典DP,可以定义 ...
- HDU 1244 Max Sum Plus Plus Plus
虽然这道题看起来和 HDU 1024 Max Sum Plus Plus 看起来很像,可是感觉这道题比1024要简单一些 前面WA了几次,因为我开始把dp[22][maxn]写成dp[maxn][2 ...
- (Problem 16)Power digit sum
215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of th ...
- hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)
题目链接:hdu 3415 Max Sum of Max-K-sub-sequence 题意: 给你一串形成环的数,让你找一段长度不大于k的子段使得和最大. 题解: 我们先把头和尾拼起来,令前i个数的 ...
- HDU 1024 Max Sum Plus Plus (动态规划)
HDU 1024 Max Sum Plus Plus (动态规划) Description Now I think you have got an AC in Ignatius.L's "M ...
- hdu 4825 Xor Sum(trie+贪心)
hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ...
随机推荐
- Android安全问题 静音拍照与被拍
之前写过一些android手机root之后的安全问题的(文章列表见末尾),其实我是想到哪就写到了,今天整理硬盘,发现一年之前写过一段代码,所以今天我们就一起来讨论一下. 注:这里不是讨论多nb的技术, ...
- 《 UNIX网络编程》源码的使用
学习编程这东西,看代码,改代码,运行代码这样才能学到实际东西!本书说在www.unpbook.com可以获取源码,不过打不开!所以google unpv13e.tar.gz 并在网络上找到了:源码:h ...
- Uploadify 控件上传图片 + 预览
jquery的Uploadify控件上传图片和预览使用介绍. 在简单的servlet系统中和在SSH框架中,后台处理不同的,在三大框架中图片预览时费了不少力气,所以下面将两种情况都介绍一下. 1,前台 ...
- mappingResources,annotatedClasses(映射)
这两个是有本质区别的,光看名字也能看出来,哈哈,好了,入正题: mappingResources用于指定少量的hibernate配置文件像这样 Xml代码 1 2 3 4 5 6 7 <prop ...
- 腾讯TDW:大型Hadoop集群应用[转载]
转自:http://www.uml.org.cn/sjjm/201508103.asp 作者:Uri Margalit 来源:InfoQ 发布于:2015-8-10 TDW(Tencent dist ...
- C# DateDiff与DateAdd
原文地址:http://www.wlm.so/Article/Detail/lmb49q5hxpqyi00000 刚刚在百度上搜C#里面的DateDiff,一看吓一跳,C#没有这个函数. 还有各种自定 ...
- FJOI2007轮状病毒
不会推公式…… 不会基尔霍夫矩阵…… 不会matrix—tree定理…… 膜拜vfleaking大神…… 题解:http://z55250825.blog.163.com/blog/static/15 ...
- 为自己打造Linux小系统
一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为 ...
- [swustoj 1021] Submissions of online judge
Submissions of online judge(1021) 问题描述 An online judge is a system to test programs in programming c ...
- C# 判断两张图片是否一致的快速方法
#region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img& ...