• 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
     
    Source
     

    题意:给你n个数,(1<=n<=100),还有一个k(1<=k<=n),然后允许给某一个数加上k的正整数倍,当然可以不加,问你是否可以把这n个数变成1,2,3,...,n,可以就输出Jerry,否则输出Tom。

    分析:一开始直接开个100数组去记录每个数出现的次数。。。如果某一个数出现了,那就不用动这个数了,对于没出现的数,枚举要加的数(k,2k,3k,...注意边界,不能超过这个数)。如果存在某一个数没出现而且不能通过别的数加若干个k,直接判断不能实现 。。简简单单就过了

     

    来源:http://mathlover.info/archives/hdu5090

     

    代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int m,n,k;
     9     cin>>m;
    10     int a[105],cnt[102];
    11     bool p[105];
    12     while(m--)
    13     {
    14         cin>>n>>k;
    15         memset(cnt,0,sizeof(cnt));
    16         memset(p,0,sizeof(p));
    17 
    18         for(int i=0;i<n;i++)
    19         {
    20             cin>>a[i];
    21             if(p[a[i]]==0)///判断出现的标志
    22                 p[a[i]]=1;
    23             else
    24                 cnt[a[i]]++;///多余的数字
    25         }
    26 
    27         bool flag=1;///标记谁能赢
    28         for(int i=1;i<=n;i++)
    29         {
    30             if(p[i]==0)///如果这个数没有出现
    31             {
    32                 bool ok=0;
    33                 for(int j=1;i-j*k>=1;j++)///依次减去k的倍数
    34                 {
    35                     if(cnt[i-j*k])///若多余
    36                     {
    37                         cnt[i-j*k]--;
    38                         ok=1;
    39                         break;///即是可以由多余的数字变化而来,逆过程
    40                     }
    41                 }
    42                 if(!ok)///ok==0-------若果没有找到,则进行此if
    43                 {
    44                     flag=0;
    45                     break;
    46                 }
    47             }
    48         }
    49 
    50         if(flag)
    51             puts("Jerry");
    52         else
    53             puts("Tom");
    54     }
    55     return 0;
    56 }
     
  • 相关阅读:
    解决 idea 项目中Error:java: 无效的标记: XX:MaxPermSize=512M
    vant预览图片
    react路由
    computed和watch
    仓库系统面单常用的打印插件
    04.简单了解一下Redis企业级数据备份方案
    CRMEB 源码 login页 获取信息 缓存修改
    frp 搭建远程桌面
    ABP asp.net core 项目发布 IIS部署
    MYSQL 监控数据库SQL语句 查看数据库执行语句
  • 原文地址:https://www.cnblogs.com/moqitianliang/p/4788468.html
Copyright © 2020-2023  润新知