zoukankan      html  css  js  c++  java
  • 轻院校赛-zzuli 2266: number【用每位的二进制的幂的和来进行hash(映射)处理】

    zzuli 2266: number

    大致题意:
     
    给定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<<y;
    18                     vis[y]=1;
    19                 }
    20                 x/=10;
    21             }
    22             hash2[val]++;
    23         }
    24 
    25         ll ans=0;
    26         for(int i=1;i<=2000;i++){
    27             if(hash2[i]>=2){
    28               //  printf("%d %d
    ",i,hash2[i]);
    29                 ans+=(ll)hash2[i]*(ll)(hash2[i]-1)/(ll)2;
    30             }
    31 
    32         }
    33         printf("%lld
    ",ans);
    34 
    35     }
    36 
    37     return 0;
    38 }
    View Code(头文件都私奔去了!)
  • 相关阅读:
    D语言中的Range与C#中IEnumreable的区别
    D语言中使用Curl读取网页
    在D语言中如何调用Windows中的COM控件
    D语言反射
    D语言基本类型判断 traits.d
    Struts2 XML验证器
    (十四)Struts2 验证框架
    (十三)Struts2 发送电子邮件
    (十二)Struts2 数据库访问
    (十一)Struts2 文件上传
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/8933151.html
Copyright © 2011-2022 走看看