记录编号 427174 评测结果 AAAAAAAAAA
题目名称 2674.[ZJOI 2009]硬币游戏 最终得分 100
用户昵称 J_william 是否通过 通过
代码语言 C++ 运行时间 1.400 s
提交时间 2017-07-20 19:17:53 内存使用 1.84 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;

const int MAXN = 200003;
int a[MAXN], b[MAXN];
long long n, T, m;
long long l, r;
int work(long long x, long long y) {
    l = (x - y) % m + m;
    l = l % m;
    r = (x + y) % m;
    if(a[l] == 0) return 0;
    if(a[l] == a[r]) return 1;
    return 2;
}

void solve(long long k, long long c) {
    if(!k) return;
    solve(k / 2, c << 1);
    if(!(k % 2)) return;
    for(int i = 1; i <= (int)m; i++) b[i] = work((long long)i, c);
    swap(a, b);
}

int main() {
	freopen("zjoi09coins.in","r",stdin);
	freopen("zjoi09coins.out","w",stdout);
    scanf("%d%lld",&n,&T);
    m = n << 1;
    for(int i = 1; i <= (int)n; i++) scanf("%d",&a[i*2-1]);
    solve(T, 1);
    for(int i = 1; i <= (int)m; i++) {
        cout<<a[i];
        if(i != m) putchar(' ');
        else putchar('\n');
    }
    return 0;
}