Codeforces 1288B - Yet Another Meme Problem

题目大意:

令conc(a,b)函数得出的结果为将ab拼接得到的数字。

例如:conc(12,23)=1223

a和b不会包括前导0!

接下来,你已知A和B,问有多少对的(a,b)满足

1≤a≤A , 1≤b≤B

a*b+a+b=conc(a,b)

 

解题思路:

想法题,只需要满足b这个数字每一位全为9,那么等式 a*b+a+b=conc(a,b) 恒成立

因为 a*b+a+b=a*(b+1)+b

b+1为一个首位是1,其余位全为0的数,且长度为b的长度+1

所以a*(b+1)+b相当于a*(Length(b)+1)+b,即满足conc(a,b)的功能

故,只要计算1到B中有多少每一位全为9的数,再乘以A即可(a任取恒满足)

注意,最坏情况下a有1e9种,b有9种,最大的答案为9e9,超出int范围,必须用long long

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
bool isnine(ll in){
    while(in){
        if(in%10!=9)
            return false;
        in/=10;
    }
    return true;
}
int len(ll in){
    int ans=0;
    do{
        in/=10;
        ans++;
    }while(in);
    return ans;
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    ll T,A,B,i,j,k;
    cin>>T;
    while(T--){
        cin>>A>>B;
        if(isnine(B))
            cout<<A*len(B)<<endl;
        else
            cout<<A*(len(B)-1)<<endl;
    }
    
    return 0;
}

 

posted @ 2020-01-21 12:00  StelaYuri  阅读(276)  评论(0编辑  收藏  举报