码迷,mamicode.com
首页 > 其他好文 > 详细

HDU5090模拟,hash

时间:2014-11-14 06:55:07      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:io   ar   os   sp   for   on   art   代码   bs   

  1. /* 
  2.     HDU 5090  
  3.     算是一道简单模拟题,但其中有很深的hash思想 
  4.     这是本人的第一道hash题 
  5.     更是本人的第一道纸质代码不带编译不带运行提交AC的题 
  6.     值得纪念 
  7.      
  8.     废话讲这么多之后,讲述题中思想 
  9.     由于n很小不超过100,可以开个数组记录每个数出现多少次 
  10.     由于只能i+n*k变大,因此只需要从1到n逐个检查 
  11.         若当前检查的hash[i]=0则无解:因为不可能有其他数能够变化成它 
  12.         若当前检查的hash[i]>1则必须将i变化为j=n*k+i(n>0),其中hash[j]=0代表 j 在输入的数中没有出现过由数 i 变过来的 
  13.         若当前检查的hash[i]=1继续 
  14.     循环一遍之后,只需判断标志符号 
  15. */   
  16.   
  17. #include <iostream>  
  18. #include <algorithm>  
  19. #include <stdio.h>  
  20. #include <math.h>  
  21. #include <map>  
  22. #include <set>  
  23. #include <vector>  
  24. #include <string>  
  25. #include <cstring>  
  26. #include <sstream>  
  27. using namespace std;  
  28.   
  29. #define input freopen("input.txt","r",stdin);  
  30. #define output freopen("output.txt","w",stdout);  
  31. #define For1(i,a,b) for (i=a;i<b;i++)  
  32. #define For2(i,a,b) for (i=a;i<=b;i++)  
  33. #define Dec(i,a,b) for (i=a;i>b;i--)  
  34. #define Dec2(i,a,b) for (i=a;i>=b;i--)  
  35. #define Sca_d(x) scanf("%d",&x)  
  36. #define Sca_s(x) scanf("%s",x)  
  37. #define Sca_c(x) scanf("%c",&x)  
  38. #define Sca_f(x) scanf("%f",&x)  
  39. #define Sca_lf(x) scanf("%lf",&x)  
  40. #define Fill(x,a) memset(x,a,sizeof(x))  
  41. #define MAXN 1110  
  42.   
  43. template <typename T>    
  44. T gcd(T a,T b)    
  45. {  
  46.     return b==0?a:gcd(b,a%b);    
  47. }  
  48.    
  49. template <typename T>   
  50. T lcm(T a,T b)    
  51. {    
  52.     return a/gcd(a,b)*b;    
  53. }  
  54.   
  55. int main()  
  56. {  
  57.     int hash[MAXN];  
  58.     int t,n,k,i,j,m,flag;  
  59.     cin>>t;  
  60.     while(t--)  
  61.     {  
  62.         cin>>n>>k;  
  63.         Fill(hash,0);  
  64.         For2(i,1,n)  
  65.             Sca_d(m),hash[m]++;  
  66.         flag=1;  
  67.         For2(i,1,n)  
  68.             if (!hash[i])  
  69.                 {  
  70.                     flag=0;  
  71.                     break;  
  72.                 }  
  73.             else if (hash[i]==1) continue;  
  74.             else  
  75.             {  
  76.                 for(j=i+k;j<=n;j+=k)  
  77.                     if (hash[i]>1&&hash[j]==0)  
  78.                     {  
  79.                         hash[j]=1;  
  80.                         hash[i]--;  
  81.                     }  
  82.             }  
  83.         if (flag) cout<<"Jerry\n";  
  84.         else cout<<"Tom\n";  
  85.     }  
  86.     return 0;  

HDU5090模拟,hash

标签:io   ar   os   sp   for   on   art   代码   bs   

原文地址:http://www.cnblogs.com/yuyanbian/p/4096334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!