[HDU 5710]Digit-Sum:其他

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

点击这里查看原题

可以从*2后各位数和的变化来考虑,如果某一位≥5,那么 *2后必然会进位,于是本位-10,前一位+1,总共减少9,因此我们只需要考虑两个问题:

  • 数字总和应该是多少?
  • 应该有多少位>4?

其实这两个问题可以同时解决,设S(n)=x,则S(2n)=2x-9k,k为正整数,那么,(2b-a)/9b*x一定为正整数,因此,可以设c=2b-a,d=9b,求gcd(c,d),则S(n)=d/gcd,大于4的位数t=c/gcd,然后从低位往高位填数即可。

/*
User:Small
Language:C++
Problem No.:5710
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
int num[205],len,now,a,b;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int main(){
    freopen("data.in","r",stdin);//
    ios::sync_with_stdio(0);
    int t;
    cin>>t;
    while(t--){
        memset(num,0,sizeof(num));
        len=now=0;
        cin>>a>>b;
        if(a>2*b||b>5*a){
            cout<<0<<endl;
            continue;
        }
        if(a==2*b){
            cout<<1<<endl;
            continue;
        }
        int c=2*b-a,d=9*b,g=gcd(c,d);;
        c/=g;
        d/=g;
        len=c;
        for(int i=1;i<=len;i++){
            num[i]=5;
            d-=5;
        }
        while(d){
            num[++now]+=min(4,d);
            d-=min(4,d);
        }
        for(int i=max(len,now);i;i--) cout<<num[i];
        cout<<endl;
    }
    return 0;
}
HDU - 5710—— Digit-Sum Sample Input 3 2 1 4 1 3 4 Sample Output   1 0 55899   需要注意,当 a&gt;2×b以及 5×a&lt;b时,不可构造,输出  #include &lt;bits/stdc++.h&gt; typedef long long LL; using namespace std; int GC... 阅读详情

相关推荐

Digit sum

Digit sum 描述 原题链接Digit sum 意思就是给出一个数n,把1~n的每个数的b进制求出,再把每个b进制数的每一位相加求和,最后把每一个和相加求和就是所求的结果。 这个题非常简单,但我提交三次都是运行超时,下面是超时的代码: //运行超时 #include <iostream> #include <cstdio> using namesp...

kang_bk的博客 1144

hdu5710 Digit-Sum(构造+贪心)

题目 S(n)定义为一个数的各数位之和 给定a,b(0&lt;a,b&lt;101), 求满足a*S(n)==b*S(2n)的最小的n 如果无解输出0 思路来源 https://www.cnblogs.com/wenruo/p/5562100.html https://blog.csdn.net/DorMOUSENone/article/details/71223368 题解 如...

小衣同学的博客 452

Digit Sum

The Preliminary Contest for ICPC Asia Shanghai 2019 OJ:https://nanti.jisuanke.com/t/41422 题目大意:给你两个数n,b。 让你将n转换为对应的b进制,然后求出(0-n)对应的进制的和。 假设给你的n是7,b是2。那么7的二进制位111,那么Sum(n) = 1 + 1+ 1 = 3 最后就是让你求出1...

P19777的博客 471

HDU 5710 Digit-Sum

 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)

Kim0403的博客 957

hdu 5710 Digit-Sum (构造题)

题目链接:hdu 5710 Digit-Sum 题意: 定义S(n)=n的数位和,给你一个a,b让你找一个n使得a*S(n)=b*S(2n)。 题解: 传送门 构造题很少做啊!! 太弱了 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 #define ___ ...

weixin_30670151的博客 168

HDU 5710 Digit-Sum 数学杂题

原题见HDU 5710题意:定义S(N)S(N)是NN的数位之和,给出一对a,b(0<a,b<101)a,b(0<a,b<101),求是否存在nn满足a×S(n)=b×S(2n)a\times S(n)=b\times S(2n)分析:S(n)与S(2n)S(n)与S(2n)的关系如何?对于n中的任何一个数位x,若x为0-4,则因为没有进位,所以在S(2n)中贡献为2x;若x为5-9,则由于其超过1

Ugly Gardon 1987

HDU-5710 Digit-Sum

HDU-5710 Digit-Sum AC代码及题解

月凉酱的博客 342

hdu 5710 digitsum数论

题目链接 hdu 5710 思路题 /*竟然一道题想了两天 对于n中的任何一个数位x,若x为0-4,则因为没有进位, 所以在S(2n)中贡献为2x;若x为5-9,则由于其超过10,在S(2n)中贡献为2x-10+1. a*S=b*(2S*9L) 则 (2b-a)S=9*b*L s=9bl/(2b-a); s就是s(n),a,b就是题目中给的ab l是某一位上为5-9的 位数 1. a=2b,则...

candiceyj的博客 226

HDU 5710 digit sum

题意: 定义S(N) 为数字N每个位上数字的和。 在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n)。 分析: 为我们要找到满足 a * S(n) = bS(2n) 的最小的n的值,首先第一个想法肯定暴力啊..但是暴力肯定不对啊... 比如--->2 3 输出5589 也就是说从整体(一个数字)到部分(各个位数)的思路是行不通的,因为是digit 所以可以尝试由...

aocai9291的博客 121

HDU5710-Digit-Sum

题目传送门 题目大意: 定义S(N) 为数字N每个位上数字的和。在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n) 思路在代码中会详细解说,请看代码#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int ans[100]; int tot; int gcd(int n,i

kaven 4632

hdu 5710 Digit-Sum (推公式)

题目链接 题意: S(n)为n的各个位的数字之和,给出a,b,求最小的n值(n为正整数),使得a*S(n)=b*S(2*n),没有的话输出0 思路: 首先,1-9的S(n)值和S(2*n)值如下: n S(n) S(2*n) S(2*n)-S(n) 1 1 ...

暖心的博客 496

Hdu 5710 Digit-Sum【思维】

Digit-Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 486    Accepted Submission(s): 148 Problem Description Let S(N) be digi

mengxiang000000 602

HDU 5710 Digit Sum

LetS(N)S(N)be digit-sum ofNN, i.eS(109)=10,S(6)=6S(109)=10,S(6)=6.If two positive integersa,ba,bare given, find the least positive integernnsatisfying the conditiona×S(n)=b×S(2n)a×S(n)=b×S(2...

weixin_30657999的博客 110

Digit-Sum HDU - 5710

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,b are given, find the least positive integer nnsatisfying the condition a×S(n)=b×S(2n)a

dsaghjkye的博客 407

HDU 5710 Digit-Sum (数学规律题)

Digit-Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 848    Accepted Submission(s): 260Problem Description Let S(N) be digit-sum of N, i.e ...

满月照亮的路 414

HDU5710Digit-Sum-思维+构造

测试地址:Digit-Sum 题目大意: 令S(n)S(n)S(n)为nnn的十进制表示的各个数位之和,要求构造出一个最小正整数满足a⋅S(n)=b⋅S(2n)a\cdot S(n)=b\cdot S(2n)a⋅S(n)=b⋅S(2n)。 做法: 本题需要用到思维+构造。 我们尝试找出从nnn变成2n2n2n后,数位和的变化。令nnn包含的≥5\ge 5≥5的数位有xxx个,那么变成2n2n2n后...

Maxwei_wzj的OI世界 378
上一篇: [HDU 1796]How many integers can you find:容斥原理
下一篇: [HDU 5923]Prediction:并查集
BrooksBUAA
博客等级 码龄10年 11粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值