HDU 5710 digit sum
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5710 digit sum相关的知识,希望对你有一定的参考价值。
?????????continue gcd ?????? 1.2 namespace str == ?????? ??????
?????????
??????S(N) ?????????N???????????????????????????
???????????????a,b????????????????????????n????????? a??S(n)=b??S(2n)???
??????:
???????????????????????? a * S(n) = bS(2n) ????????????n?????????????????????????????????????????????..???????????????????????????... ??????--->2 3 ??????5589
??????????????????????????????????????????????????????????????????????????????????????????????????????digit ?????????????????????????????????????????????????????????
???????????????????????????????????????S???2n??? ?????????????????????????????????????????????????????????
?????????S???2n???????????????????????????S???N?????? S???2N??????????????????????????????
????????????????????????????????????????????????????????????????????????????????????2????????????
???????????? ???????????????[0,4]?????? 2n??? ???????????????????????????????????????????????????[5,9]??????????????????????????????2n-9
???cnt ???n???????????????????????????5???
S???2n???= 2*S(n)-9cnt
??????????????????????????????
9b:2b-a=S(n):cnt
????????????????????????S???n) ??? 9b cnt??? 2b-a
??????????????????????????????????????????S(n)???cnt????????????????????????N
???????????????????????????
?????????????????????9???
????????????... ?????????...
???????????????
1.2b-a=0?????? S???????????? ??????????????????????????????n=1???
2.a>2b?????????
3.a<2b ????????????b<=5a
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int a,b;
cin >> a >> b;
int cnt = 2*b-a;
int s = b*9;
if(a == 2*b)
{
cout << 1 <<endl;
continue;
}
if(a>2*b||5*a<b)
{
cout<< 0 <<endl;
continue;
}
int gcd = __gcd(cnt,s);
cnt/=gcd;
s/=gcd;
string ans=string(cnt,???5???);
//??????????????????????????????????????????????????????
//cout<<ans<<endl;
s-=5*cnt;
int val;
for(int i=ans.size()-1;i>=0;i--)
{
val=min(s,4);
ans[i]+=val;
s-=val;
}
while(s)
{
val=min(s,4);
ans=char(val+???0???)+ans;
s-=val;
}
cout<<ans<<endl;
}
return 0;
}
以上是关于HDU 5710 digit sum的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1061 [Rightmost Digit] 数学方法