1. 程式人生 > >Codeforces Round #439 A The Artful Expedient 博弈解釋 +暴力寫法

Codeforces Round #439 A The Artful Expedient 博弈解釋 +暴力寫法

畢竟是 A 題,直接兩重迴圈就可以暴力過去。。

按博弈想的話就是 : ai ^ aj = ak  的話,那麼可以推出 : ai ^ ak = aj   和  aj ^ ak = ai ;

沒有重複的元素,如果能在已有集合中找到一個   ai ^ bj  滿足條件的話,那這個異或後的數(假設為 c ) 也會有 (ai ^ c = bj  )或者 (bj ^ c = ai) ,兩種情況中的一種,

也就是說符合情況的兩個數異或然後結果肯定是成對出現的   所以答案一定是 Karen 贏

暴力寫法如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <sstream>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
const int maxn = 20000000 + 7, INF = 0x7f7f7f7f, mod = 1e9 + 7;
int n;
int vis[maxn] = {0}, a[2222], b[2222];

int main() {
    //cout << (3^2) << endl;

    scanf("%d", &n);
    int cnt = 0;
    for(int i = 0; i < n; ++i) {
        scanf("%d", &a[i]);
        vis[a[i]] = 1;
    }
    for(int i = 0 ; i < n; ++i) {
        scanf("%d", &b[i]);
        vis[b[i]] = 1;
    }
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < n; ++j) {
            if(vis[(a[i]^b[j])]) cnt++;
        }
    }
    if(cnt % 2 == 0) puts("Karen");
    else puts("Koyomi");

    return 0;
}