CodeForces - 346A 앨리스와 밥 (숫자 이론 + 게임)

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/qq_45458915/article/details/102751228

주제 링크 : 여기를 클릭하십시오

타이틀 효과 : 주어진 초기 조성물의 세트의 수 (n)는, 앨리스와 밥은 이제 두 인출 운영 규칙에 따라 전환 요구, 즉, 하나의 전송을 제공 할 수, 게임의 규칙은 두 임의로 숫자의 세트를 선택 절대 값이 원래의 집합에 존재하지 않는 경우, 절대 값의 x 및 y를 산출 (XY), 그것은 등 컬렉션에 추가되고

제목 분석 : Huala는 일부 라인은 자신의 논문을 시작하고, 먼저 새 값이 처음에 설정 한 특정 최대 값보다 작을 때마다 추가하고, 마지막으로 게임은 지난 1-Mmax 순 세트에서 온해야 할 때 모든 숫자, 그래서 적어도 15 개 샘플을 잃었고에서 지불 한 정신을 유지하려고,이 아이디어는 여전히 다음, 약간의 의미를 생각합니다. . , 뺄셈의 도입으로 제거 할 수 있습니다 (A, B) = GCD (A가 B ㄱ %) 붙어, 또는 ZX 노인은 유클리드 알고리즘, GCD에 따라, 즉, 내가 진실을 이해했다 당함 : GCD (A를, B) = GCD (학사, B), 즉, 숫자의 신흥 이전 세트, 최대 공약수의 수는이 지점입니다, 일정, 다음 점은 우리는 세트의 최대 공약수는 것을 가정 할 수있다 k는, 다음 마지막 세트의 수는해야한다 : K, 2 * K, 3 * K ... N * k는, 즉 모든 숫자가 K의 배수 말을하는 것입니다, 이것은 단지 위에서 언급 한 결론이 접촉은, 그래서 우리는 우리가이 결론으로, 우리가 쉽게 마지막을 알 수있다, K의 수집, 2 * K ... Mmax 순으로 끝날 것을 의미한다 위에서 언급 한 최대 공약수이며,이 때 K를 시작할 수 있습니다 Mmax 순 / 수 k의 총을 설정 한 다음 두 사람이 Mmax 순 / KN 시간의 총을 작동 할 수, 패리티 무엇을 결정할 수있다

코드 :

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream> 
#include<unordered_map>
using namespace std;

typedef long long LL;

const int inf=0x3f3f3f3f;

const int N=1e5+100;

int main()
{
//  freopen("input.txt","r",stdin);
	int n;
	scanf("%d",&n);
	int mmax=0;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		int num;
		scanf("%d",&num);
		mmax=max(mmax,num);
		if(ans==0)
			ans=num;
		else
			ans=__gcd(ans,num);
	}
	mmax/=ans;
	if((mmax-n)&1)
		printf("Alice\n");
	else
		printf("Bob\n");
	
	
	
	
	
	
	
	
	
	return 0;
}

 

추천

출처blog.csdn.net/qq_45458915/article/details/102751228