博弈论+递推+调和级数枚举,CF 1033C - Permutation Game

2024-06-23 06:04

本文主要是介绍博弈论+递推+调和级数枚举,CF 1033C - Permutation Game,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1033C - Permutation Game


二、解题报告

1、思路分析

我们考虑一个位置符合什么条件可以必胜?

如果可以跳到一个必败的位置

考虑最大的格子一定是必败

而每个格子只能跳到比自己大的格子

于是我们就可以倒序处理状态

对于每个格子枚举比自己大的整数倍距离的格子中是否有必败态

似乎是O(N^2),但是由于枚举的是自己的倍数距离的下标, 是O(NlnN)的

2、复杂度

时间复杂度: O(NlnN)空间复杂度:O(N)

3、代码详解

 ​
#include <bits/stdc++.h>
using i64 = long long;
using i128 = __int128;
using PII = std::pair<int, int>;
const int inf = 1e8 + 7, P = 1e9 + 7;void solve() {int n;std::cin >> n;std::vector<int> a(n), pos(n);std::vector<bool> f(n);std::string res(n, 'B');for (int i = 0; i < n; i ++ ) std::cin >> a[i], pos[a[i] - 1] = i;for (int i = n; i; i -- ) {int j = pos[i - 1];while (j >= i) j -= i;for (; j < n; j += i) {if (a[j] <= i) continue;if (!f[j]) {f[pos[i - 1]] = true;break;}}if (f[pos[i - 1]]) res[pos[i - 1]] = 'A';}std::cout << res;
}int main(int argc, char** argv) {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);int _ = 1;// std::cin >> _;while (_ --)solve();return 0;
}

这篇关于博弈论+递推+调和级数枚举,CF 1033C - Permutation Game的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086334

相关文章

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 置换检验是一种非参数统计方法,它不依赖于数据的分布形态,因此特别适用于小样本数据集,尤其是当样本总体分布未知或不符合传统参数检验的假设条件时。置换检验的基本思想是通过随机置换样本来评估观察到的统计量是否显著不同于随机情况下的预期值。最初真正认识置换检

博弈论(Nim 游戏)

公平组合游戏ICG 若—个游戏满足: 由两名玩家交替行动;在游戏进程的任意时刻,可以执行的合法行动与轮到哪名玩家无关;不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件 2 2 2 和条件 3 3 3。 可以看出,公平组合游戏不存在平局,而且

IOS Swift 从入门到精通:数组,集合,元组,对比,字典,枚举

目录 数组 集合 元组 Arrays vs sets vs tuples 字典  字典默认值 创建空集合 枚举 枚举关联值 枚举原始值 复杂类型:总结 数组 数组是存储为单个值的值的集合。例如,John、Paul、George 和 Ringo 是姓名,但数组可让您将它们分组为单个值,即 The Beatles。 在代码中我们这样写: let john

java基础知识枚举提取公共类

引用地址:今日头条 如何规范化Enum在项目中的使用? 2022-03-02 14:14·老顾聊技术 前言 在我们平时开发过程中,枚举的使用时必不可少的。 为什么要用枚举? 有穷序列的字段用int或tinyint不是挺好吗? 答案很简单:我们的程序写给人看的。 既然是写给人看,那么,可理解、易理解往往显得相当重要! 枚举一般有两部分,一个是枚举项值,一个是枚举描述。那么,这两个

Android性能优化—不建议使用枚举Enum

最近优化App,由于项目中使用了Lib,而Lib代码中包含了大量的枚举类型,导致App占用内存过多发火。好吧,知道问题点,那就干掉,抛弃之~偷笑 问题是解决了,为啥会这样呢?疑问 先来看看Android官网的说明吧: 看见了吧,Android官网不建议咱们使用enums,说的也很清楚了,占用内存多(Enums often require more than twice as much memo

【游泳game】

编写一个游泳游戏涉及到多个方面,包括游戏设计、图形渲染、物理模拟、音效和用户界面。以下是一个简化的游泳游戏编写流程,假设我们使用Unity游戏引擎进行开发: 1. 游戏设计 游戏目标:确定游戏的基本规则,例如计时赛、竞速赛或技巧挑战。角色和场景:设计玩家角色和游泳池场景,包括赛道、观众、记分牌等。游戏玩法:设计控制方式,如触摸屏、键盘或体感控制器。 2. 准备开发环境 安装Unity编辑器

484. Find Permutation

https://leetcode.com/problems/find-permutation/description/ 题目大意:给一串DDII…D代表下降趋势,I代表上升.根据这一串DDII的序列构建出一个整数vector,且若有多个vector符合要求,返回字典序最小的. 解题思路:根据讨论的思路,首先构建出完全增序(IIII….)的序列1,2,3,4,…n,然后找序列中所有的D,将对应位

293. Flip Game

题目大意:给一串字符++–….,要依次把所有两个连续++翻转成–,求所有可能的输出. 解题思路:一次遍历,遇到两个连续的++就翻转,输出.同时保证不影响原串,用一个tmp来操作. 注意:这里有一个奇怪的bug,若不先求出s的长度n,而是在for循环中设终止条件为 s.length()-1,则遇到空串(长度为0)会报错 代码: class Solution {public:vector<s

【快乐星球game】

编写游戏程序代码是一个复杂的过程,涉及到游戏设计、编程、图形设计、音效制作等多个方面。以下是一个非常简化的示例,用于展示如何开始编写一个基本的游戏程序。我们将使用Python语言和一个名为Pygame的库来创建一个简单的游戏。 首先,确保你已经安装了Python和Pygame。你可以通过运行以下命令来安装Pygame: pip install pygame 然后,我们可以编写一个简单的游戏程