Digit-Sum(HDU - 5710)

规律题

对x (0-4) 来说 ,x对S(2n)的贡献为2*x ,对x (5-9) ,x对s(2n)的贡献为2*x-9

我们假设x(5-9)的个数为l个,则S(2n)=2S(n)-9l , 与a*S(n)=b*S(2n) 合并后 式子为S(n)*(2b-a)=9bl

S(n):l = 9b:(2b-a)

即S(n)=9b/gcd , l=(2b-a)/gcd

如果5*l > s || l<0 输出0

否则,贪心,数的大尽量往后放

c++ code:

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
const int N=1000;
int main()
{
    int digs[N];
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        int s=9*b,l=2*b-a;
        if(5*l>s || l<0)
            puts("0");
        else{
            int g=__gcd(s,l);
            l/=g;s/=g;
            s-=5*l;
            for(int i=0;i<l;i++)
            {
                digs[i]=5+min(4,s);
                s-=min(s,4);
            }
            int len=l;
            while(s)
            {
                digs[len++]=min(4,s);
                s-=min(s,4);
            }
            for(int i=len-1;i>=0;i--)
                printf("%d",digs[i]);
            puts("");
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lemon-jade/p/9228985.html