LibreOJ #524. 「LibreOJ β Round #4」游戏

时间:2023-03-09 13:28:10
LibreOJ #524. 「LibreOJ β Round #4」游戏

二次联通门 : LibreOJ #524. 「LibreOJ β Round #4」游戏

/*
LibreOJ #524. 「LibreOJ β Round #4」游戏 找找规律就会发现。。
当有X的时候,答案跟X个数的奇偶有关
否则就求一下逆序对就好了。。 由于SB的错误。。WA了3发才过
然后就签完到走人了
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm> #define Max 11 int key[Max * ], rank[Max * ];
int s[Max * ]; int Main ()
{
int N, x; scanf ("%d", &N); register int i, j;
static char l[Max]; int C = , cur = ; bool f;
if (N == ) return printf ("L"), ;
for (i = ; i <= N; ++ i)
{
scanf ("%s", l); f = false, x = ;
if (l[] == 'X') ++ C;
else
{
int Len = strlen (l);
if (l[] == '-')
{
f = true;
for (j = ; j < Len; ++ j)
if (isdigit (l[j]))
x = x * + l[j] - '';
}
else
{
for (j = ; j < Len; ++ j)
if (isdigit (l[j]))
x = x * + l[j] - '';
}
key[++ cur] = f ? -x : x;
rank[cur] = key[cur];
}
}
if (C) return printf (C % ? "W" : "L"), ;
long long Answer = ; int Size;
std :: sort (key + , key + + cur);
Size = std :: unique (key + , key + + cur) - key - ;
for (i = ; i <= cur; ++ i)
{
rank[i] = std :: lower_bound (key + , key + + Size, rank[i]) - key;
int res = ;
for (j = rank[i]; j <= cur; j += j & -j) ++ s[j];
for (j = rank[i]; j; j -= j & -j) res -= s[j];
for (j = cur; j; j -= j & -j) res += s[j];
Answer += res;
}
printf (Answer % ? "W" : "L"); return ;
} int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}