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; } }