rotate the clock
A program test:
You are given N round clocks.
Every clock has M hands, and these hands can point to positions 1, 2, 3, ..., P (yes, these represent numbers around each face). The clocks are represented by the matrix A consisting of N rows and M columns of integers. The first row represents the hands of the first clock, and so on.
For example, you are given matrix A consisting of five rows and two columns, and P = 4:
A[0][0] = 1 A[0][1] = 2
A[1][0] = 2 A[1][1] = 4
A[2][0] = 4 A[2][1] = 3
A[3][0] = 2 A[3][1] = 3
A[4][0] = 1 A[4][1] = 3
You can rotate the clocks to obtain several clocks that look identical. For example, if you rotate the third, fourth and fifth clocks you can obtain the following clocks:
After rotation, you have four pairs of clocks that look the same: (1, 3), (1, 4), (2, 5) and (3, 4).
type TMatrix = array of array of longint;
Write a function:
int solution(int **A, int N, int M, int P);
int solution(NSMutableArray *A, int P);
int solution(const vector< vector<int> > &A, int P);
class Solution { int solution(int[][] A, int P); }
class Solution { public int solution(int[][] A, int P); }
object Solution { def solution(A: Array[Array[Int]], P: Int): Int }
function solution(A, P);
function solution(A, P)
function solution($A, $P);
function solution(A: TMatrix; N: longint; M: longint; P: longint): longint;
def solution(A, P)
sub solution { my ($A, $P)=@_; my @A=@$A; ... }
def solution(a, p)
Private Function solution ( A As Integer()(), P As Integer ) as Integer
that, given a zero-indexed matrix A consisting of N rows and M columns of integers and integer P, returns the maximal number of pairs of clocks that can look the same after rotation.
For example, given the following array A and P = 4:
A[0][0] = 1 A[0][1] = 2
A[1][0] = 2 A[1][1] = 4
A[2][0] = 4 A[2][1] = 3
A[3][0] = 2 A[3][1] = 3
A[4][0] = 1 A[4][1] = 3
the function should return 4, as explained above.
Assume that:
- N is an integer within the range [1..500];
- M is an integer within the range [1..500];
- P is an integer within the range [1..1,000,000,000];
- each element of matrix A is an integer within the range [1..P];
- the elements of each row of matrix A are all distinct.
Complexity:
- expected worst-case time complexity is O(N*M*log(M)+N*log(N));
- expected worst-case space complexity is O(N*M).
Here is my solution:
class Program
{
static void Main(string[] args)
{
int[][] Testcase = new int[][] { new int[] { , , , }, new int[] { , , , },
new int[] { , , , }, new int[]{ , , , },
new int[]{ , , , }, new int[]{ , , , } };
//result should be 7
Console.WriteLine(new Solution().solution(Testcase, ));
}
} class Solution
{
public int solution(int[][] A, int P)
{
int result = ;
int hands = A[].Length; Dictionary<int[], int> buckets = new Dictionary<int[], int>();
buckets.Add (A[],); //fill the buckets
bool flgFind = false;
foreach(int[] oneClock in A)
{
flgFind = false;
foreach(int[] bucket in buckets.Keys)
{
if (CanbeRotatedToEqual(oneClock, bucket,P) == true)
{
buckets[bucket] += ;
flgFind = true;
break;
}
}
if(flgFind == false)
buckets.Add(oneClock, ); } //calculate the total pairs
foreach (int k in buckets.Values)
result += k * (k - ) / ; return result; } bool CanbeRotatedToEqual(int[] source, int[] target, int P)
{
bool flgJ = false;
int hands = source.Length;
for (int i = ; i < hands; i++)
{
int subValue = target[] - source[i]; flgJ = false;
for (int j = ; j < hands; j++)
{
int newS = source[(i + j) % hands] + subValue;
if (newS <= )
newS += P;
if (newS != target[j])
{
flgJ = true;
break;
}
}
//When flgJ is still false, that means after the source clock rotates subValue steps,
//it is identical with the target one.
if (flgJ == false)
return true;
}
//if this loop end normally, that means the source clock cannot rotate to the target one.
return false;
}
}
2013/8/18: This is not valid version.
rotate the clock的更多相关文章
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...
- 教你五步制作精美的HTML时钟
学了一段时间的HTML.CSS和JS后,给大家做一款漂亮的不像实力派的HTML时钟,先看图:涉及到的知识点有: CSS3动画.DOM操作.定时器.圆点坐标的计算(好多人是不是已经还给自己的老师了~) ...
- [Leetcode][Python]48: Rotate Image
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 48: Rotate Imagehttps://leetcode.com/pr ...
- canvas 动画 时钟clock
<canvas id="clock" width="500" height="500"></canvas> func ...
- qt下的时钟程序(简单美丽,继承自QWidget的Clock,用timer调用update刷新,然后使用paintEvent作画就行了,超详细中文注释)good
最近抽空又看了下qt,发现用它来实现一些东西真的很容易比如下面这个例子,绘制了个圆形的时钟,但代码却清晰易懂[例子源自奇趣科技提供的例子]因为清晰,所以就只写注释了,吼吼其实也就这么几行代码头文件 / ...
- Unity项目 - 简单时钟 Clock
项目展示 Github项目地址:简单时钟 Clock 制作流程 表盘绘制: 采用Aseprite 像素绘图软件绘制表盘及指针.本例钟表素材大小 256x256,存储格式为png,但发现导入Unity后 ...
- (转)rotatelogs - Piped logging program to rotate Apache logs
原文:http://publib.boulder.ibm.com/httpserv/manual60/programs/rotatelogs.html rotatelogs is a simple p ...
- CodeChef-----February Challenge 2018---Broken Clock(极坐标+三角函数递推+矩阵快速幂)
链接: https://www.codechef.com/FEB18/problems/BROCLK Broken Clock Problem Code: BROCLK Chef has a clo ...
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
随机推荐
- ✡ leetcode 159. Longest Substring with At Most Two Distinct Characters 求两个字母组成的最大子串长度 --------- java
Given a string, find the length of the longest substring T that contains at most 2 distinct characte ...
- 在Linux系统中如何设置APACHE服务器里的后台页面只允许某个IP地址访问
补充资料 本网络中使用LINUX服务器,web服务器是由APACHE搭建,IP地址为192.168.1.5,后台页面为/admin/login.jsp . 如何设置后台页面LOGIN.JSP只允许19 ...
- 论文笔记之: Hierarchical Convolutional Features for Visual Tracking
Hierarchical Convolutional Features for Visual Tracking ICCV 2015 摘要:跟卢湖川的那个文章一样,本文也是利用深度学习各个 layer ...
- MSSQL反旋转的例子
with cte as ( select 'A' as tag , as num_1 , as num_2 , as num_3 , as num_4 ,null as num_5 union sel ...
- Emmet 真是个好东西
他的官网:http://docs.emmet.io/ 给广大程序员节省时间 #page>div.logo+ul#navigation>li*5>a{Item $}生产 <div ...
- for xml path(''),root('')
,,'') SELECT top 10 ROW_NUMBER()OVER(ORDER BY OperationID) as 'Message/MessageId', OperationID as 'I ...
- SPRING + THYMELEAF 配置
1.使用的是Spring EL而不是Ognl.2.访问上下文的Bean用${@myBean.doSomething()}3.th:field,th:errors,th:errorclass用于form ...
- mysql 的 infobright 数据库的 mediumblob 显示不了数据
需要修改mysql的配置文件: /var/www/html/phpmyadmin/config.inc.php 增加: $cfg['ProtectBinary'] = FALSE; 即可
- 51nod 最近刷题 简要题解
51nod 1564 由于数据是随机的,可以证明,对于每一个数,向左或右找比它小的数,长度是logn级别的 考虑枚举最大值 注意,对于每一个最大值,如果直接用2个循环枚举左右端点的话,理论是lognl ...
- GC之六--SystemGC完全解读
概述 JVM的GC一般情况下是JVM本身根据一定的条件触发的,不过我们还是可以做一些人为的触发,比如通过jvmti做强制GC,通过System.gc触发,还可以通过jmap来触发等,针对每个场景其实我 ...