2266: number

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



posted @ 2018-04-24 20:13  _大美  阅读(181)  评论(0编辑  收藏  举报