LibreOJ「LibreOJ β Round #4」 游戏

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

/*
    LibreOJ「LibreOJ β Round #4」 游戏

    找找规律就会发现。。
    当有X的时候,答案跟X个数的奇偶有关
    否则就求一下逆序对就好了。。

    由于SB的错误。。WA了3发才过
    然后就签完到走人了
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>

#define Max 11

int key[Max * 10000], rank[Max * 10000];
int s[Max * 10000];

int Main ()
{
    int N, x; scanf ("%d", &N); register int i, j;
    static char l[Max];     int C = 0, cur = 0 ; bool f;
    if (N == 1) return printf ("L"), 0;
    for (i = 1; i <= N; ++ i)
    {
        scanf ("%s", l); f = false, x = 0;
        if (l[0] == ‘X‘) ++ C;
        else
        {
            int Len = strlen (l);
            if (l[0] == ‘-‘)
            {
                f = true;
                for (j = 1; j < Len; ++ j)
                    if (isdigit (l[j]))
                        x = x * 10 + l[j] - ‘0‘;
            }
            else
            {
                for (j = 0; j < Len; ++ j)
                    if (isdigit (l[j]))
                        x = x * 10 + l[j] - ‘0‘;
            }
            key[++ cur] = f ? -x : x;
            rank[cur] = key[cur];
        }
    }
    if (C) return printf (C % 2 ? "W" : "L"), 0;
    long long Answer = 0; int Size;
    std :: sort (key + 1, key + 1 + cur);
    Size = std :: unique (key + 1, key + 1 + cur) - key - 1;
    for (i = 1; i <= cur; ++ i)
    {
        rank[i] = std :: lower_bound (key + 1, key + 1 + Size, rank[i]) - key;
        int res = 0;
        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 % 2 ? "W" : "L");

    return 0;
}

int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}
时间: 2024-10-12 22:52:24

LibreOJ「LibreOJ β Round #4」 游戏的相关文章

loj #6091. 「Codeforces Round #418」幻想特快

#6091. 「Codeforces Round #418」幻想特快 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<queue> 6 using namespace std; 7 #define maxn 10000 8 int n,a[maxn],b[maxn],p[maxn],nxt1,nxt2,tot,

「LibreOJ β Round #4」游戏

https://loj.ac/problem/524 题目描述 qmqmqm和sublinekelzrip要进行一场游戏,其规则是这样的: 首先有一个序列,其中每个位置是一个整数或是X.双方轮流将X的位置填入此前不在序列中的实数,直到序列中充满数字为止.qmqmqm优先填数.若最后这个序列的逆序对数目为奇数,则qmqmqm获得胜利,否则sublinekelzrip获得胜利.qmqmqm想知道若双方均采取最优决策,在一个给定的序列下他能否获胜.设最终序列中第iii个数为aia_ia?i??,则逆序

loj #6090. 「Codeforces Round #418」尘封思绪

https://loj.ac/problem/6090 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 #define maxn 10900 9 int n,k,a[maxn],b[maxn],cnt

「Codeforces Round #441」 Classroom Watch

Discription Eighth-grader Vova is on duty today in the class. After classes, he went into the office to wash the board, and found on it the number n. He asked what is this number and the teacher of mathematics Inna Petrovna answered Vova that n is th

【LOJ #6094. 「Codeforces Round #418」归乡迷途】

题目大意: 传送门. lca说的很明白就不重复了. 题解: 先膜一发lca. 大体读完题以后我们可以知道对于第i个节点最短路一定是连向1到i-1中的某个点. 然后我们考虑将到1距离(这里及以下均是最短路)相等的点放到同一层,显然最后的总体结构应该是一棵树,再加上在同一层/深度相同的点之间连接一些边的并. 很容易发现一层的转移只需要知道上一层度数为2/3的个数,以及当前层之间的相互连接. 先说一下$n^5$做法. 设$f_{i,p1,p2,u_1,u_2}$表示插入第i个点时,上一层度数为2/3还

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

二次联通门 : LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 /* LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例 很显然 贪心方程哦不 dp方程为 f[i][j]=f[i-1][j-k*k] 但是这样的话复杂度就是O(N ^ 5) 那么就用bitset优化一下 就ok了 */ #include <iostream> #include <cstdio> #include <bitset> void

LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意

二次联通门 : LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 /* LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 本想打个暴力找找规律 结果交上去就A了... 读入所有数 处理出前缀和 然后枚举区间长度 处理处1~n的答案 后O(1)查询即可 复杂度O(n^2 + m) */ #include <iostream> #include <cstring> #include <cstdio> voi

LibreOJ #6191. 「美团 CodeM 复赛」配对游戏

二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp 不是很懂为什么这样做... */ #include <cstdio> #include <iostream> const int BUF = 12312312; char Buf[BUF], *buf = Buf; inline void read (int &now) { for (now = 0; !isdi

LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱就好了 再随便用前缀和优化一下 O(N) */ #include <iostream> #include <cstdio> const int BUF = 100000010; char Buf[BUF], *buf = Buf; inline long long max (long