普转提——有趣的数,欢乐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