2266: number
时间限制: 1 Sec 内存限制: 128 MB提交: 76 解决: 31
[提交][状态][讨论版][命题人:admin]
题目描述
某人刚学习了数位DP,他在某天忽然思考如下问题:
给定n,问有多少数对<x, y>满足:
x, y∈[1, n], x < y
x, y中出现的[0, 9]的数码种类相同
输入
一个整数n (n <= 107)
输出
输出一个数即答案
样例输入
30
样例输出
3
提示
<1, 11> <2, 22> <12, 21>
#include<stack>
#include<queue>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
#define maxn 1000005
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define mod 1000000007
#define inf 0x3f3f3f
using namespace std;
ll ans[1<<9+1];
int main(){
int n;while(~scanf("%d",&n)){
mem(ans,0);ll sum=0;
for(int i=1;i<=n;i++){
int x=i;int s=0,y=0;
while(x){
y=x%10;
x/=10;
s|=(1<<y);//cout<<s<<" "<<(1<<y)<<" ";
}
//cout<<endl;
sum+=ans[s];
ans[s]++;
}
cout<<sum<<endl;
}
}