Codeforces Round 839 (Div. 3)E题解

文章目录

Permutation Game

问题建模

给定一个长度为n的排列,排列的每个元素都被阻塞无法移动,有两个玩家,每个玩家每一轮可以选择三种操作的一种执行,操作1为重新排序所有未被阻塞的元素,操作2为将序列中的一个元素解除阻塞,操作3为跳过,若玩家1能先将所有元素排为升序则其胜利,若玩家2能将所有元素排为降序则其胜利,否则平局。

问题分析

1.分析一个玩家想要获胜的关键

一个玩家想要获胜则需要在其想要获得顺序的元素中那些不符合他所需顺序的元素都解除阻塞后,第一个执行重新排序的操作将所有元素排成所需的才可以。而另一个玩家想要获胜也同样如此。因此获胜关键在阻塞元素上。

2.分析阻塞元素的类别

两个玩家都需要解除阻塞不符合他们所需顺序的元素,而这些元素中有一部分位置是一样的,为了让自己获胜,则优先做对自己最有利的事,即先解封不一样的。设玩家1独立所需解封元素数量为a,玩家2独立所需解封元素数量为b,共同所需解封元素数量为c。

3.分析阻塞元素的类别对于局面的影响

当玩家1想要获胜时需要将其所有需要解除阻塞的元素都解除,且需要赶在另一个玩家解除其单独所需元素之前执行完,则需满足的条件为a+c<=b,取等于是因为玩家1先手的话,当所有所需元素都解封了,能先手执行排序操作,若满足小于的话则必定能在玩家2解除其单独所需元素之前,将自己所需元素都解除,且先执行排序操作。

则当玩家2想要获胜时则需要满足的条件为b+c<a,若满足该条件必定能在玩家1解除其所需元素之前,将自己所需元素都解除,且先执行排序操作。

其余情况,则为任意一个玩家都不能赶在另一个玩家解除其单独所需元素之前先将所需元素都解除阻塞,那另一个玩家在解除其单独所需元素后,可以一直执行操作3,等待所有元素解封后执行排序操作,则最终进入两个玩家都不解除最终所需的元素,从而平局。

代码

c 复制代码
#include<bits/stdc++.h>

#define x first
#define y second
#define C(i) str[0][i]!=str[1][i]
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const int N = 5e5 + 10, INF = 0x3f3f3f3f;

void solve() {
    int n;
    cin >> n;
    int a = 0, b = 0, c = 0;
    for (int i = 0; i < n; i++) {
        int x;
        scanf("%d", &x);
        if (x != i + 1) {
            if (x != n - i)  c++;
            else a++;
        } else b++;
    }

    if(a+c<=b)  puts("First");
    else if(b+c<a)  puts("Second");
    else puts("Tie");
}

int main() {
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}
相关推荐
qyzm3 小时前
天梯赛练习(3月13日)
开发语言·数据结构·python·算法·贪心算法
逆境不可逃3 小时前
LeetCode 热题 100 之 64. 最小路径和 5. 最长回文子串 1143. 最长公共子序列 72. 编辑距离
算法·leetcode·动态规划
CoderCodingNo4 小时前
【GESP】C++五级练习题 luogu-P1182 数列分段 Section II
开发语言·c++·算法
放下华子我只抽RuiKe54 小时前
机器学习全景指南-直觉篇——基于距离的 K-近邻 (KNN) 算法
人工智能·gpt·算法·机器学习·语言模型·chatgpt·ai编程
kisshuan123964 小时前
[特殊字符]【深度学习】DA3METRIC-LARGE单目深度估计算法详解
人工智能·深度学习·算法
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章33-Blod分析
图像处理·人工智能·opencv·算法·计算机视觉
Eward-an5 小时前
LeetCode 239. 滑动窗口最大值(详细技术解析)
python·算法·leetcode
一叶落4385 小时前
LeetCode 50. Pow(x, n)(快速幂详解 | C语言实现)
c语言·算法·leetcode
皙然5 小时前
彻底吃透红黑树
数据结构·算法
t198751286 小时前
TOA定位算法MATLAB实现(二维三维场景)
开发语言·算法·matlab