zzuli
大致题意:
给定n,问有多少数对<x, y>满足:
x, y∈[1, n], x < y
x, y中出现的[0, 9]的数码种类相同
输入
一个整数n (n <= 107)
输出
输出一个数即答案
样例输入
30
样例输出
3
大致思路:
N的值其实也不是很大,可以考虑跑一次循环把每个值全部分离一次,然后将用二进制上的第0-第9位的‘1’来表示数码0-9,并且要用数组进行标记防止加了两次!
至于hash2 同样因为2^10也就1204,其实开到1000就够了!
在hash2中1--1000每个数字都代表一种种类!
求得是两个同种类型的组合,n个同类数可以构成n*(n-1)种不重不漏的组合!
AC 题解:
1 #define N 2005 2 3 int main(){ 4 int n; 5 int hash2[2001]; 6 7 while(scanf("%d",&n)!=EOF){ 8 memset(hash2,0,sizeof(hash2)); 9 for(int i=1;i<=n;i++){10 int x=i;11 12 int vis[10]={ 0};13 int val=0;14 while(x>0){15 int y=x%10;16 if(!vis[y]){17 val+= 1<=2){28 // printf("%d %d\n",i,hash2[i]);29 ans+=(ll)hash2[i]*(ll)(hash2[i]-1)/(ll)2;30 }31 32 }33 printf("%lld\n",ans);34 35 }36 37 return 0;38 }