杭电OJ 2104. hide handkerchief

2023-12-06 04:58
文章标签 杭电 oj 2104 hide handkerchief

本文主要是介绍杭电OJ 2104. hide handkerchief,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

Problem Description

The Children’s Day has passed for some days .Has you remembered something happened at your childhood? I remembered I often played a game called hide handkerchief with my friends.
Now I introduce the game to you. Suppose there are N people played the game ,who sit on the ground forming a circle ,everyone owns a box behind them .Also there is a beautiful handkerchief hid in a box which is one of the boxes .
Then Haha(a friend of mine) is called to find the handkerchief. But he has a strange habit. Each time he will search the next box which is separated by M-1 boxes from the current box. For example, there are three boxes named A,B,C, and now Haha is at place of A. now he decide the M if equal to 2, so he will search A first, then he will search the C box, for C is separated by 2-1 = 1 box B from the current box A . Then he will search the box B ,then he will search the box A.
So after three times he establishes that he can find the beautiful handkerchief. Now I will give you N and M, can you tell me that Haha is able to find the handkerchief or not. If he can, you should tell me "YES", else tell me "POOR Haha".

 

Input

There will be several test cases; each case input contains two integers N and M, which satisfy the relationship: 1<=M<=100000000 and 3<=N<=100000000. When N=-1 and M=-1 means the end of input case, and you should not process the data.

 

Output

For each input case, you should only the result that Haha can find the handkerchief or not.

 

Sample Input

3 2

-1 -1

 

Sample Output

YES

 

思路:

该题目的大体意思是,有N个人参加了“找手绢”游戏。N个人围成一个圆圈,手绢就藏在其中某一个人的手里,哈哈同学负责找手绢。哈哈同学找手绢有个习惯,就是心中默想一个数M,检查完一个人后,就检查其之后的第M-1个人,直至找到手绢。给你一组N,M的组合,问你哈哈同学能否成功找到手绢。

读完这个题我也是一阵懵逼,最后参考了别人的答案。

如果哈哈同学能够按照他的方法找到手绢,则需要N个人都被访问,这就要求N和M互质,即N和M的最大公因数为1,否则N位同学中必有一些人不被访问,导致哈哈同学找不到手绢。

(证明就略了,数学太菜)

问题的关键就是看N和M的最大公因数是否为1,这里介绍“辗转相除法”。

辗转相除法:求两个数N和M的最大公因数
(1)先将大数N除以小数M,取余;
(2)如果余数为0,则小数M为两个数的最大公因数;如果余数不为0,则将小数M除以该余数,继续取余;
(3)如果新的余数为0,则上一个余数为原来两个数的最大公因数;如果新的余数不为0,则将上一个余数除以该新的余数,继续取余; 
(4)重复第(3)步,直到新的余数为0 ,此时的上一个余数就是原来两个数N和M的最大公因数

 

实现(C++):

#include <iostream>
using namespace std;int main(){int N, M;while(cin>>N>>M){if(N==-1&&M==-1)break;while(M!=0){int temp=M;M=N%M;N=temp;}if(N!=1)cout<<"POOR Haha"<<endl;elsecout<<"YES"<<endl;}return 1;
}

学好算法需要强大的数学思维能力与扎实的数学基础
 

 

这篇关于杭电OJ 2104. hide handkerchief的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460510

相关文章

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

OJ-0905

题目 示例1: 输入:10 10 56 34 99 1 87 8 99 3 255 6 99 5 255 4 99 7 255 2 99 9 255 213 4输出:99 示例2: 输入:10 10 255 34 0 1 255 8 0 3 255 6 0 5 255 4 0 7 255 2 0 9 255 213 5输出:255 import java.util.

计算机视觉中,什么是Hide-and-Seek?

是的,Hide-and-Seek 技术主要是在弱监督学习领域中使用的,它的核心思想是通过随机遮掩输入图像的一部分,强迫模型学习更全面的特征,而不是仅仅依赖显著的局部信息。由于弱监督场景下的监督信号有限,例如只有少量的点标注、粗略标注或没有任何标注,模型容易过度依赖于图像中最显著的部分,而忽略其他信息。这种现象会导致模型只关注容易识别的局部特征,而无法理解物体的整体结构或捕捉更多的背景信息。 1.

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器(逆波兰表达式) 解析代码 牛客_Emacs计算器(逆波兰表达式) Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值,需要借助栈,思路: 循环输入,获取逆波兰表达式,然后进行以下补助,直到测试完所有的测试用例: 遇到数字字符串,将该数字字符串转化为数字然后入栈。遇到操作符时,从栈顶取两个数字,然后进行该运算符所对应运算

【POJ】2104 K-th Number 静态第K小——主席树

传送门:【POJ】2104 K-th Number 题目分析: 哇咔咔,又get了一个新技能——主席树,初步学习主席树,一次AC,感觉好棒~ 也在此Orz一下发明者主席——fotile96,在叉姐群经常看到主席的身影,不过蒟蒻也只能仰望神犇的背影了,起步迟且天赋不如人,只能慢慢的走下去,希望有一天能看到另一个世界。 主席树的编程方式是函数式编程(可持久化),保证我们可以查询历史

2024杭电8

1004.cats 的重力拼图 题意: 有一个n*m的矩阵,给出最开始拼图的位置。 可以有四个选择,设置重力的方向,就是拼图会向一个方向竖直掉落到最底。 问任意操作次数后拼图走过的方格数量最大值。 题解: 首先已经在边缘的拼图,只能沿着边走一圈,再判断最开始可以朝哪个方向移动是最大值。 代码: #include<bits/stdc++.h>using namespace s

西北工业大学oj题-兔子生崽

题目描述: 兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,每对成兔每个月可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子? 这道题目一眼看过去就是典型的递归问题,代码如下 public class RabbitReproduction {public static void main(String[] args) {in

★ 算法OJ题 ★ 力扣209 - 长度最小的子数组

Ciallo~(∠・ω< )⌒☆ ~ 今天,简将和大家一起做一道滑动窗口算法题--长度最小的子数组~ 目录 一  题目 二  算法解析 解法⼀:暴力求解 解法二:滑动窗口 三  编写算法 一  题目 209. 长度最小的子数组 - 力扣(LeetCode) 二  算法解析 解法⼀:暴力求解 算法思路: 从前往后枚举数组中的任意⼀个元素,把它当成起始位置