其他分享
首页 > 其他分享> > 普转提——有趣的数,欢乐ABC、

普转提——有趣的数,欢乐ABC、

作者:互联网

给你一个区间,问有多少个数符合每一位中,只有一个数字和其他数字不同,也就是其他数字都相同,有且只有一个异类;

数据范围是1e16;

因为只考虑数量而不用管大小;

只要0到9枚举出来就好了;

#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>

using namespace std;
typedef long long ll;
map<ll,int>mp;
ll l,r;
int a[20];

int check(int x,int len)
{
    ll sum=0;
    for(int i=1;i<=len;i++)
    {
        if(a[i]==-1) a[i]=x;
        sum=sum*10+a[i];
    }
    if(sum>=l&&sum<=r) 
    {
        if(!mp[sum]) 
        {
            mp[sum]=1;
            return 1;
        }
        //printf("%d\n",sum);
        return 0;
    }
    else return 0;
}
int ans;
int main()
{
    scanf("%lld%lld",&l,&r);
    for(int len=3;len<=17;len++)
    {
        for(int i=0;i<=9;i++)
        {
            for(int j=0;j<=9;j++)//单独的数
            {
                if(i==j) continue;
                for(int k=1;k<=len;k++)//单独的数的位置
                {
                    memset(a,-1,sizeof(a));
                    if(k==1&&j==0) continue;
                    a[k]=j;
                    if(check(i,len)) ans++;
                }
            }
        }
    }
    printf("%d",ans);
    return 0;
}

记得判重,用的map省心;

 

标签:ABC,普转,数字,int,ll,long,欢乐,include,sum
来源: https://www.cnblogs.com/WHFF521/p/11523599.html