hdu 1527, poj 1067 돌 채취 게임 위 조 프 보 이 (Wythoff Game)
위 조 프 보 혁 (Wythoff Game): 두 무더기 가 각각 몇 개의 물건 이 있 습 니 다. 두 사람 은 돌아 가면 서 한 무더기 또는 동시에 두 더미 에서 똑 같은 물건 을 찾 습 니 다. 매번 에 적어도 하 나 를 취하 고 다 자 는 제한 하지 않 으 며 마지막 에 빛 을 얻 는 사람 이 이 기 는 것 을 규정 합 니 다. 이런 상황 하에 서 는 꽤 복잡 하 다.우 리 는 (ak, bk) (ak ≤ bk, k = 0, 1, 2,..., n) 으로 두 무더기 의 물품 의 수량 을 표시 하고 그것 을 정세 라 고 부른다. 만약 에 갑 이 (0, 0) 직면 하면 갑 이 이미 졌 다. 이런 정 세 를 우 리 는 기이 한 정세 라 고 부른다. 앞의 몇 가지 기이 한 정 세 는 (0, 0), (1, 2), (3, 5), (4, 7), (6, 10), (8, 13), (9, 15), (11, 18),(12,20).
이 를 통 해 알 수 있 듯 이 a0 = b0 = 0, ak 는 앞에서 나타 나 지 않 은 최소 자연수 이 고 bk = ak + k 는 기이 한 정 세 는 다음 과 같은 세 가지 특징 이 있다.
1. 모든 자연 수 는 하나의 기이 한 상황 에 포함 되 어 있다. ak 는 앞에서 나타 나 지 않 은 최소 자연수 이기 때문에 ak > ak - 1 이 있 고 bk = ak + k > ak - 1 + k - 1 = bk - 1 > ak - 1 이 있 습 니 다. 그래서 성질 1. 성립 됩 니 다. 2. 임의로 조작 하면 기이 한 정 세 를 기이 하지 않 은 정세 로 바 꿀 수 있다. 사실 기이 한 정세 (ak, bk) 의 한 분량 만 바 꾸 면 다른 분량 은 다른 기이 한 정세 에 있 을 수 없 기 때문에 기이 한 정세 가 아 닐 수 밖 에 없다. (ak, bk) 의 두 분량 을 동시에 줄 이면 그 차이 가 변 하지 않 고 그의 기이 한 정세의 차이 일 수 없 기 때문에 기이 한 정세 도 아니다. 3. 적당 한 방법 으로 기이 하지 않 은 정 세 를 기이 한 정세 로 바 꿀 수 있다.
만약 에 직면 한 상황 이 (a, b) 이 라 고 가정 하면 b = a 는 두 더미 에서 a 개의 물 체 를 동시에 가 져 가면 기이 한 상황 (0, 0) 으로 변 한다. 만약 에 a = ak, b > bk 라면 b 를 가 져 간다. – bk 개 물 체 는 기이 한 정세 로 변 한다. 만약 a = ak, b < bk, 동시에 두 더미 에서 ak – ab – ak 개 물 체 를 가 져 가 기이 한 상황 (ab – ak, ab – ak + b – ak) 으로 변 한다. 만약 a > ak, b = ak + k 라면 첫 번 째 더미 에서 여분의 수량 a – ak 를 가 져 가면 된다. 만약 a < ak, b = ak + k, 두 가지 상황 으로 나 뉘 면 첫 번 째, a = aj (j < k), 두 번 째 더미 에서 b – bj 를 가 져 가면 된다. 두 번 째, a = bj (j < k), 두 번 째 더미 에서 b – a j 를 가 져 가면 됩 니 다.
위의 성격 을 통 해 알 수 있 듯 이 두 사람 이 모두 정확 한 조작 을 한다 면 기이 하지 않 은 상황 에 직면 하여 먼저 이 기 는 사람 은 반드시 이 기 는 것 이 고, 반대로 이 기 는 사람 이 이 기 는 것 이다.
그렇다면 하나의 정세 (a, b) 에 임 하여 그것 이 기이 한 정세 인지 아 닌 지 를 어떻게 판단 합 니까? 우 리 는 다음 과 같은 공식 이 있 습 니 다.
ak =[k(1+√5)/2],bk= ak + k (k = 0, 1, 2,..., n 방 괄호 는 취 정 함 수 를 나타 낸다) 기묘 한 것 은 그 중에서 금 분할 수 (1 + √ 5)/2 = 1. 618 이 나 타 났 다 는 것 이다. 따라서 ak, bk 로 구 성 된 사각형 은 금 사각형 과 비슷 하 다. 2/(1 + √ 5) = (√ 5 - 1)/2 로 인해 먼저 j = [a (√ 5 - 1)/2] 를 구 할 수 있다. 만약 a = [j (1 + √ 5)/2]그러면 a = aj, bj = aj + j, 같 지 않 으 면 a = aj + 1, bj + 1 = aj + 1 + j + 1, 그렇지 않 으 면 기이 한 상황 이 아니다. 그리고 상기 법칙 에 따라 진행 하면 반드시 기이 한 상황 을 만 날 것 이다.
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
int n,m;
int x,y;
const double g=1.61803398874;
int main()
{
while(~scanf("%d%d",&x,&y))
{
if (x>y) swap(x,y);
double k=y-x;
if (int(k*g)==x) puts("0");
else puts("1");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.