Game with Pearls

Problem Description
Tom and Jerry are playing a game with tubes and pearls. The rule of the game is:
1) Tom and Jerry come up together with a number K.
2) Tom provides N tubes. Within each tube, there are several pearls. The number of pearls in each tube is at least 1 and at most N.
3) Jerry puts some more pearls into each tube. The number of pearls put into each tube has to be either 0 or a positive multiple of K. After that Jerry organizes these tubes in the order that the first tube has exact one pearl, the 2nd tube has exact 2 pearls, …, the Nth tube has exact N pearls.
4) If Jerry succeeds, he wins the game, otherwise Tom wins.
Write a program to determine who wins the game according to a given N, K and initial number of pearls in each tube. If Tom wins the game, output “Tom”, otherwise, output “Jerry”.
Input
The first line contains an integer M (M<=500), then M games follow. For each game, the first line contains 2 integers, N and K (1 <= N <= 100, 1 <= K <= N), and the second line contains N integers presenting the number of pearls in each tube.
Output
For each game, output a line containing either “Tom” or “Jerry”.
Sample Input
2
5 1
1 2 3 4 5
6 2
1 2 3 4 5 5
Sample Output
Jerry
Tom

题目大意:

    Tom和Jerry做游戏,给定N个管子,每个管子上面有一定数目的珍珠。

    现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放。

    最后将管子排序,如果可以做到第i个管子上面有i个珍珠,则Jerry胜出,反之Tom胜出。

解题思路:

    贪心:(15ms)

       将N个管子按管子中的珍珠数量升序排序,则满足条件的时候第i个管子应该有i个珍珠。

       每个管子开始遍历,如果第i个管子有i个珍珠,则进行下一次循环;

       如果小于i个珍珠,则加上k个珍珠,重新按升序排序;

       如果大于i个珍珠,则说明不满足条件 .

    二分匹配:(125ms)

       以 6 3 1 1 2 3为样例。

       1 可以变成 {1,4}

       1 可以变成 {1,4}

       2 可以变成{2}

       3 可以变成{3}

       如果从集合{1,1,2,3}到集合{1,2,3,4}的最大匹配数为N,则代表这两两匹配,Terry胜出。

    大牛的思路:(0ms)

       用num数组记录每个数共有几种可能被组成出来。

       同以6 3 1 1 2 3为样例。

       num[1]=2,num[2]=1,num[3]=1,num[4]=2

       从1到N遍历,如果num[i]不等于零,则固定下来它的管子,那么之后的num[i+n*k]应该相应的减少1,即可能性减少一。

       如果遍历到i时,num[i]==0,则说明没有可以构成i的管子存在了,Tom胜出。

Code(匈牙利算法二分匹配):

 /*************************************************************************
> File Name: shanghai_1001.cpp
> Author: Enumz
> Mail: 369372123@qq.com
> Created Time: 2014年11月02日 星期日 12时07分00秒
************************************************************************/ #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<list>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<bitset>
#include<climits>
#define MAXN 1020
using namespace std;
int a[MAXN];
bool edge[MAXN][MAXN];
int N,K,M=;
int link[MAXN];
bool vis[MAXN];
bool dfs(int x)
{
for (int y=N+;y<=N*;y++)
if(edge[x][y]&&!vis[y])
{
vis[y]=;
if (link[y]==||dfs(link[y]))
{
link[y]=x;
return true;
}
}
return false;
}
void search(void)
{
for (int x=;x<=N;x++)
{
memset(vis,,sizeof(vis));
if(dfs(x))
M++;
}
return ;
}
int main()
{
int T;
cin>>T;
while (T--)
{
cin>>N>>K;
memset(link,,sizeof(link));
memset(edge,,sizeof(edge));
for (int i=; i<=N; i++)
{
cin>>a[i];
for (int j=a[i]; j<=N; j+=K)
{
edge[i][j+N]=;
edge[j+N][i]=;
}
}
M=;
search();
if (M==N)
printf("Jerry\n");
else
printf("Tom\n");
}
return ;
}

Code(大牛的0ms):

 #include<stdio.h>
#include<string.h>
int main()
{
int a,num[],i,j,k,n,flag,T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
memset(num,,sizeof(num));
for(i=;i<=n;i++){
scanf("%d",&a);
for(j=a;j<=n;j+=k)
num[j]++;
}
flag=;
for(i=;i<=n&&flag;i++){
if(!num[i])
flag=;
else
for(j=i;j<=n;j+=k)
num[j]--;
}
if(flag)
printf("Jerry\n");
else
printf("Tom\n");
}
return ;
}

HDU5090——Game with Pearls(匈牙利算法|贪心)(2014上海邀请赛重现)的更多相关文章

  1. HDU5093——Battle ships(最大二分匹配)(2014上海邀请赛重现)

    Battle ships Problem DescriptionDear contestant, now you are an excellent navy commander, who is res ...

  2. HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)

    Seam Carving DescriptionFish likes to take photo with his friends. Several days ago, he found that s ...

  3. HDU5099——Comparison of Android versions(简单题)(2014上海邀请赛重现)

    Comparison of Android versionsProblem DescriptionAs an Android developer, itˇs really not easy to fi ...

  4. HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)

    题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...

  5. BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法

    题目大意:给定一个n∗n的满秩矩阵A和一个n∗n的矩阵B.求一个字典序最小的1...n的排列a满足将随意一个Ai换成Bai后矩阵A仍然满秩 我们考虑建立一个二分图.假设Ai能换成Bj.就在i−> ...

  6. POJ3041 Asteroids(匈牙利算法)

    嘟嘟嘟 虽然我已经会网络流了,但是还是学了一个匈牙利算法. --就跟我会线段树,但还是学了树状数组一样. 其实匈牙利算法挺暴力的.简单来说就是先贪心匹配,然后如果左部点\(i\)匹配不上了,就尝试更改 ...

  7. poj3020 建信号塔(匈牙利算法 最小覆盖边集)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10518   Accepted: 518 ...

  8. POJ3041轰炸行星(匈牙利算法 最小覆盖点集)

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25232   Accepted: 13625 Descr ...

  9. 【BZOJ3168】[Heoi2013]钙铁锌硒维生素 高斯消元求矩阵的逆+匈牙利算法

    [BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花 ...

随机推荐

  1. Oracle bbed使用说明2---常用命令

    一.BBED常用命令说明 先看帮助的说明 BBED> help all SET DBA [ dba | file#, block# ] SET FILENAME 'filename' SET F ...

  2. PAT乙级真题1008. 数组元素循环右移问题 (20)

    原题: 1008. 数组元素循环右移问题 (20) 时间限制400 ms内存限制65536 kB 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M&g ...

  3. JAVA面试题集之基础知识

                           JAVA面试题集之基础知识 基础知识:  1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...

  4. 初识Qt Creator

    (1).Qt Creator是一个跨平台的.完整的Qt集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具,下载地址http://download.qt.io/archive/qt/: ( ...

  5. Daily Scrum 11.6

    摘要:在本次meeting时,所有代码的修改工作已经接近尾声,接下来是进行的就是单元测试以及进行alpha版本的改进.本次的Task列表如下: Task列表 出席人员 Today's Task Tom ...

  6. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(菜单篇)

    这章主要说插件的菜单,可以说菜单是最核心的部分,前面我们已经实现了Document添加,现在主要就是生成具有层级关系的菜单,以及把菜单跟我们自定义的Document关联起来,也就是MenuPart-& ...

  7. 使用Lucene.net提升网站搜索速度整合记录

    1.随着网站数据量达到500万条的时候,发现SQL数据库如果使用LIKE语句来查询,总是占用CPU很忙,不管怎么优化,速度还是上不来; 2.经过网上收集资料,HUBBLE.net目前虽然做得不错,但需 ...

  8. Vim安装ctags插件

    问题描述: 系统安装ctags插件 问题解决: (1)下载ctags插件 (2)新下载的ctags文件是一个tar包文件,使用tar -zxcf命令进行解压缩 注: 解压缩之后的 ctags文件,如上 ...

  9. AlphaToCoverage solution

    After msaa output the alpha in ps remove clip in ps in blendstate add AlphaToCoverageEnable = TRUE - ...

  10. 使用文本文件(.txt)进行数据存取的技巧总结(相当的经典)

    使用文本文件(.txt)进行数据存取的技巧总结(相当的经典) 使用文本文件(.txt)进行数据存取的技巧总结 由于本帖内容较多,部分转自他人的心得,因此,凡转贴的地方仅用“----转----”标注,原 ...