题目来源: Codility
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
有N个时钟,每个时钟有M个指针,P个刻度。时钟是圆形的,P个刻度均分整个圆。每个时钟每个指针指向整数刻度,并且每个时钟自身指针指向的数字都不同。你可以任意旋转时钟的表盘,但是你不能转指针。问最后有多少对时钟可以变成相同的状态。
 
例如:N = 5,M = 2,P = 4,5个时钟的数据如下{1, 2} {2, 4} {4, 3} {2, 3} {1, 3}
 
 
经过旋转后。 其中(1, 3), (1, 4), (2, 5) 和 (3, 4)是相同的。
 
 
给出所有时钟的数据,求有多少对时钟是相同的。
Input
  1. 1行:3个数N, M, P中间用空格分隔,其中N为时钟的数量,M为表针的数量,P为刻度的数量(1 <= M, N <= 500, 1 <= P <= 10^9, M <= P)。
  2. 2 - N + 1行:每行M个数,对应一个时钟,M个指针的位置。
Output
  1. 输出有多少对时钟是相同的。
Input示例
  1. 5 2 4
  2. 1 2
  3. 2 4
  4. 4 3
  5. 2 3
  6. 1 3
Output示例
  1. 4
  2.  
  3. //思路是有的,但是最小表示法不知道,一只wa。。。学习了最小表示法,还是很好理解的
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define INF 0x3f3f3f3f
  4. #define LL long long
  5. #define MX 505
  6.  
  7. const int hash_ = ;
  8.  
  9. int n, m, p;
  10. int ans;
  11. int ke[MX];
  12. int cha[MX];
  13. map<LL,int> zz;
  14.  
  15. int get_min(int *s, int len) //返回最小表示法的始端
  16. {
  17. int i = , j = , k = ;
  18. while(i<len && j<len && k<len)
  19. {
  20. int t = s[(i+k)%len]-s[(j+k)%len];
  21. if (!t) k++;
  22. else
  23. {
  24. if (t>) i += k+;
  25. else j += k+;
  26. if (i==j) j++;
  27. k = ;
  28. }
  29. }
  30. return i<j?i:j;
  31. }
  32.  
  33. void calc()
  34. {
  35. sort(ke,ke+m);
  36. for (int i=;i<m;i++)
  37. cha[i-] = ke[i]-ke[i-];
  38. cha[m-] = ke[]+p-ke[m-];
  39. int dex= get_min(cha,m);
  40.  
  41. LL has=, quan =;
  42. for (int i=;i<m;i++)
  43. {
  44. has += cha[(dex+i)%m]*quan;
  45. quan*= hash_;
  46. }
  47. ans+=zz[has];
  48. zz[has]++;
  49. }
  50.  
  51. int main()
  52. {
  53. scanf("%d%d%d",&n,&m,&p);
  54. ans = ;
  55. for (int i=;i<n;i++)
  56. {
  57. for (int j=;j<m;j++)
  58. scanf("%d",&ke[j]);
  59. calc();
  60. }
  61. printf("%d\n",ans);
  62. return ;
  63. }
  1.  

1282 时钟(最小表示法+hash)的更多相关文章

  1. 51Nod 1282 时钟 —— 最小表示法 + 字符串哈希

    题目链接:https://vjudge.net/problem/51Nod-1282 1282 时钟 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难 ...

  2. POJ 1635 树的最小表示法/HASH

    题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...

  3. hdu2609 How many【最小表示法】【Hash】

    How many Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  4. luogu P5043 【模板】树同构 hash 最小表示法

    LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法 ...

  5. 51 Nod 1282 时钟 (循环中的最小表示+哈希)

    1282 时钟  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形 ...

  6. poj 3349 (最小表示法)

    开始按hash做的 交上去就wa 但是和标称拍了半天也没有不一样的 可能是生成的数据太水了吧... #include<iostream> #include<cstdio> #i ...

  7. [BZOJ4337][BJOI2015]树的同构(树的最小表示法)

    4337: BJOI2015 树的同构 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1023  Solved: 436[Submit][Status ...

  8. 51nod1282(最小表示法&&枚举)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1282 题意:中文题目诶- 思路:指针不可转,刻盘可转,显然,对 ...

  9. Luogu P3886 [JLOI2009]神秘的生物 最小表示法,轮廓线DP,插头DP,动态规划

    亲手写掉的第一道最小表示法!哈哈哈太开心啦~ 不同于以往的几个插头\(dp\),这个题目的轮廓线是周围的一圈\(n\)个格子.而其所谓"插头"也变成了相邻格子的所属连通分量编号,并 ...

随机推荐

  1. EJB学习笔记之十(BMT事务和CMT事务)

     1.前言 前两篇博客主要介绍了与事务相关的知识.比如事务的一些特性,以及并发产生的问题.本篇来解说一下EJB中两种处理事务的方式.一种是以生命式方式来管理事务(CMT):还有一种则是在EJB内部使用 ...

  2. UVA 11534 - Say Goodbye to Tic-Tac-Toe(博弈sg函数)

    UVA 11534 - Say Goodbye to Tic-Tac-Toe 题目链接 题意:给定一个序列,轮流放XO,要求不能有连续的XX或OO.最后一个放的人赢.问谁赢 思路:sg函数.每一段.. ...

  3. iOS开发-使用代码退出应用程序,带动画。

    有时候我们需要使用代码中断程序,如果直接调用exit方法,会使得程序就像是崩溃那样,因此我们应该加上一个动画效果. 例如: AppDelegate *app = [UIApplication shar ...

  4. Cookie的增删改查

    增加: 第一种方法:Response.Cookies[“UserName”].Value=”张三” Response.Cookies[“UserName”].Expires=DateTime.Now. ...

  5. Spring Sleuth和Zipkin跟踪微服务

    原文地址:http://www.cnblogs.com/skyblog/p/6213683.html 随着微服务数量不断增长,需要跟踪一个请求从一个微服务到下一个微服务的传播过程, Spring Cl ...

  6. 转: Your build settings specify a provisioning profile with the UUID, no provisioning profile was found

    http://blog.csdn.net/rbyyyblog/article/details/12220875 在Archive项目时,出现了“Your build settings specify ...

  7. nodejs 获取指定路径下所有的文件夹名

    示例:获取 ./components 下所有的文件夹名称 let components = [] const files = fs.readdirSync('./components') files. ...

  8. Atitit.python web环境的配置 attilax 总结

    Atitit.python web环境的配置 attilax 总结 1. 下载modpython/1 1.1. 安装python2.5.11 1.2. 安装modpython1 2. 设置py文件的u ...

  9. Unity3d 引擎原理详细介绍、Unity3D引擎架构设计 - zhibolife

    时间 2014-03-24 11:18:00  博客园-所有随笔区原文  http://www.cnblogs.com/zhibolife/p/3620440.html 体系结构 为了更好地理解游戏的 ...

  10. c#序列化和反序列化list

    List<UserData> lstStuModel = new List<UserData>() { new UserData(){Name="001", ...