돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개, 3개 또는 4개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000)
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
https://www.acmicpc.net/problem/9660
그런디 수를 다루는 문제이다.
점화식을 세울 수 있는지 확인해보았다.
7을 주기로, 그런디수가 반복됨을 확인 할 수 있다.
이때 그런디수를 구하기위해 ( {} ) 내의 그런디수를 다른 수로 치환할때,
보라색 표기로 한 그런디수와 바꾸어야하고 집합내의 모든 원소를 전부 치환해야함을 기억하자. 몇개만 치환하면 안된다.
(그림을 잘보면 *7 의경우 전부 치환한결과 {*2, *2}가 되는데 이게 맞는것이다. 겹친다고 몇개는 치환안하고 그러면 안된다.)
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using std::vector; using std::stack; using std::queue;
using std::deque; using std::string; using std::pair;
using std::sort;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;
typedef pair<int, ll> pil;
typedef pair<int, char> pic;
typedef pair<char, int> pci;
ll n;
ll g; //전역변수는 0으로 자동 초기화
void func();
void func() {
scanf("%lld", &n);
int mod = n % 7;
mod == 0 || mod == 2 ? printf("CY") : printf("SK");
}
int main(void) {
func();
return 0;
}