列表

详情


NC216204. DrinkingTimeI

描述

来到了鸽子转转转酒吧,向酒保 点了亿杯红酒、 杯红茶、 杯耗子尾汁。 作为一名正常的上班族酒保,当然拒绝了 的不合理要求。但是 为了达到目的,提出要与 玩个游戏,若他在游戏中获胜,则 要满足他的要求。
游戏是这样的:给出两个整数 和两个正整数 先手,两名玩家轮流行动,玩家每次行动时可以选择一个正整数 ,选择的正整数 需要满足以下限制:
  • 存在正整数 ,使得 并且
如果存在满足条件的 ,则玩家可以任意选择一个满足条件的 , 使 同时除以 ,然后换另一个玩家行动。如果不存在这样的 ,则当前玩家失败。
向聪明的你求助,他能否在游戏中获胜?
注意, 都会选择对自己更有利的策略进行游戏

输入描述

输入只有一行,包含四个整数 

输出描述

如果  能在游戏中获胜,则输出"Yes",否则输出"No"。(输出不含引号)

示例1

输入:

1 14 5 14

输出:

No

说明:

游戏开始时,Boboge_{} 先进行行动,但是因为对于任意大于 1_{} 的正整数 k_{},都不存在正整数 x,y_{} 使 k\times 5^x=1k\times 14^y=14,所以 Boboge_{} 必定失败。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2021-02-05 16:34:12

#include<stdio.h>
#include<string.h>
int main()
{
    int a,b,p,q,f=1,x,y;
	scanf("%d%d%d%d",&a,&b,&p,&q);
	while(1)
	{
		if(a%p==0&&b%q==0)
		{   x=a/p;y=b/q;
			while(x!=y&&(x%p==0||y%q==0))
			{
				if(x>y&&x%p==0&&x/p!=x)
					x=x/p;
				else if(x<y&&y%q==0&&y/q!=y)
					y=y/q;
				else
					break;
			}
			if(x>=2&&x==y){
				f=1-f;
				a=a/x;
				b=b/x;
			}
			else
				break;
		}
		else
			break;
	}
	if(f==1)
      printf("No\n");
	else
		printf("Yes\n");
	return 0;
} 

C++(clang++11) 解法, 执行用时: 13ms, 内存消耗: 504K, 提交时间: 2020-12-26 15:10:52

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;


int main(){
	int a,b,p,q;cin>>a>>b>>p>>q;
	if(p>=a||q>=b){
		cout<<"No";
	}
	else if(a%p!=0||b%q!=0){
		cout<<"No";
	}
	else {
		a/=p,b/=q;
		if(__gcd(b,a)==1){
			cout<<"No"; 
		}
		else cout<<"Yes";
	}
	return 0;
}

上一题