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;
}
相关推荐
shehuiyuelaiyuehao23 分钟前
算法44,模拟算法,数青蛙
算法·哈希算法·散列表
hanlin0337 分钟前
刷题笔记:力扣第287题-寻找重复数
笔记·算法·leetcode
kevin_kang1 小时前
第02章 对话时间线与延迟分析
算法
科学实验家1 小时前
最小生成树:Prim,kruskal
数据结构·c++·算法
学习智者1 小时前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
Jasmine_llq1 小时前
《P10263 [GESP202403 八级] 公倍数问题》
算法·数论·快速 io 优化·埃氏筛(倍数枚举)·线性遍历求和
橘子汽水1681 小时前
Leetcode 322 279 零钱兑换,完全平方数
算法·leetcode
kevin_kang1 小时前
第01章 VoiceAgent 的总体架构与完整流程
算法
Lintongzg1 小时前
KV-Cache 的显存账本:长上下文、并发与量化剪枝的取舍
算法·机器学习·剪枝
小孩玩什么1 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法