B. Yet Another Meme Problem(数学+思维)Educational Codeforces Round 80 (Rated for Div. 2)

原题链接: https://codeforces.com/contest/1288/problems

在这里插入图片描述
测试样例

Input
3
1 11
4 2
191 31415926
Output
1
0
1337

Note

There is only one suitable pair in the first test case: a=1, b=9 (1+9+1⋅9=19).

题意: 给你一个整数A和B,让你从1~ A中选出一个整数a, 1~B中选出一个整数b,要符合条件 ( a ∗ b + a + b ) = = c o n c ( a , b ) (a*b+a+b)==conc(a,b) (ab+a+b)==conc(a,b),其中 c o n c ( a , b ) conc(a,b) conc(a,b)即连接 a a a b : a b b:ab bab。让你求出有多少组这样的组合。

解题思路: 一道妥妥的数学+思维问题。由于连接 a a a b b b是不属于数学的表达,我们可以设 b b b的位数为num。那么 a b ab ab即可表示为 a ∗ 1 0 n u m + b a*10^{num}+b a10num+b,我们将此式代回原式可得 b + 1 = 1 0 n u m b+1=10^{num} b+1=10num 我们发现要使得这个式子满足的条件只关心 b b b的值, a a a取什么都行。我们再观察 1 0 n u m 10^{num} 10num只可能是10、100···,那么转换之后也就是说我们要判断位数上都是9的数字有多少个。之后与 a a a的范围相乘即可。OK,具体看代码。

AC代码

/*
*邮箱:unique_powerhouse@qq.com
*blog:https://me.csdn.net/hzf0701
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*
*/
#include<bits/stdc++.h>	//POJ不支持

#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pair

using namespace std;

const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 1e5;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll>  pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为自定义代码模板***************************************//

ll t,a,b;
void solve(){
    ll cnt=0,temp=9;
    while(b>=temp){
        temp=temp*10+9;
        cnt++;
    }
    //得到位数都是9的数量。
    cout<<a*cnt<<endl;
}
int main(){
	//freopen("in.txt", "r", stdin);//提交的时候要注释掉
	IOS;
	while(cin>>t){
        while(t--){
            cin>>a>>b;
            solve();
        }
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HeZephyr

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值