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”.
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话说这道题我用的什么我也不太清楚,反正是过了,在代码里说吧:// Created by CQUWEL // Copyright (c) 2015年 CQUWEL. All rights reserved. #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <cctype> #include <stack> #include <queue> #include <map> #include <string> #include <set> #include <vector> #define INF 0x3f3f3f3f #define CLR(x) memset(x,0,sizeof(x)) typedef long long ll; using namespace std; int m,n,k; int tube[110]; int vis[110]; int main() { cin >> m; while (m--) { cin >> n >> k; CLR(vis); // int sum=0; // int tot=(1+n)*n/2; bool ans=true; for (int i=1;i<=n;i++) { cin >> tube[i]; if (tube[i]>n) ans=false; vis[tube[i]]++; }
<span style="font-size:14px; white-space: pre;"> </span><span style="font-size:18px;">//首先在输入的时候记录没个数出现的次数,只有出现超过一次的才能够没用来弥补其他数的空缺,否则不行</span><span style="font-size:14px;"> for (int i=1;i<=n;i++) { if (vis[i]==0) { for (int j=1;j<i;j++) { if (vis[j]>1) { if ((i-j)%k==0) { vis[j]--; vis[i]++; break; /*这里就是写的过程,当发现某一个数没有出现过时,就要在小于这个数的数中选出现次数超过一次的来对他进行弥补,看是否能够弥补,一旦可以,就要将用来弥补的减一,被弥补的甲乙,这样一直往后*/ } } } } } for (int i=1;i<=n;i++) if (!vis[i]) { ans=false; break; } //最后看是否还有没有出现过的 if (ans) cout << "Jerry\n"; else cout << "Tom\n"; } return 0; } </span>