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;
}
相关推荐
fancy16616618 分钟前
力扣top100 矩阵置零
人工智能·算法·矩阵
元亓亓亓1 小时前
LeetCode热题100--240.搜索二维矩阵--中等
算法·leetcode·矩阵
明月看潮生2 小时前
青少年编程与数学 02-019 Rust 编程基础 09课题、流程控制
开发语言·算法·青少年编程·rust·编程与数学
oioihoii2 小时前
C++23 views::slide (P2442R1) 深入解析
linux·算法·c++23
yuhao__z2 小时前
代码随想录算法训练营第六十三天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
算法·图论
June`3 小时前
专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解
c++·算法·深度优先·剪枝
vlln3 小时前
适应性神经树:当深度学习遇上决策树的“生长法则”
人工智能·深度学习·算法·决策树·机器学习
冲帕Chompa4 小时前
图论part09dijkstra算法
算法·图论
·云扬·4 小时前
【PmHub后端篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现
redis·算法·lua
周Echo周4 小时前
20、map和set、unordered_map、un_ordered_set的复现
c语言·开发语言·数据结构·c++·算法·leetcode·list