Codefroces 1033C. Permutation Game

简介: 笔记

C. Permutation Game


题意:

一个线性的棋盘,上面有n个格子编号为1-n,当棋子所在位置满足以下情况时,可以移动

1.新格子的数值必须严格大于旧格子

2.移动的距离必须是旧格子中数字的整数倍

谁不能采取行动,谁就输了,即当前棋子位于一个不能移动的位置

求哪些出发格子可以使Alice必胜


思路

记录每个点下一步能到达的点,建反图然后拓扑

如果一个点标记为0代表必输点,为1代表必赢点,-1表示还没判断

对每一个入度为0的点,即没有可到达的下一个点的点进行判断


如果点u是必输点,说明无法进行下一步操作,所以,能到达这一点的点一定是必赢点,因为从必赢点跳到这一点,对手就无法进行下一步操作了。


如果点u是必赢点,那么u能到达的点一定至少有一个必输点。如果u的状态已经判断过,那就没有必要在判断,如果是-1 就设置为0

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<map>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#define INF 0x3f3f3f3f3f3f3f3f
#define mod 1000000007
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define endl &#39;\n&#39;
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
int a[maxn], degree[maxn], vis[maxn];
int q[maxn];
vector<int>v[maxn];
int main() {
  int n;cin >> n;
  for (int i = 1;i <= n;++i)cin >> a[i];
  for (int i = 1;i <= n;++i) {
    for (int j = i;j <= n;j += a[i]) {
      if (a[j] > a[i]) {
        v[j].push_back(i);
        degree[i]++;
      }
    }
    for (int j = i;j >= 1;j -= a[i]) {
      if (a[j] > a[i]) {
        v[j].push_back(i);
        degree[i]++;
      }
    }
  }
  memset(vis, -1, sizeof(vis));
  queue<int>que;
  for (int i = 1;i <= n;++i) {
    if (!degree[i])que.push(i), vis[i] = 0;
  }
  while (!que.empty()) {
    int now = que.front();
    que.pop();
    for (int i = 0;i < v[now].size();++i) {
      int t = v[now][i];
      if (vis[now] == 0) {
        vis[t] = 1;
      }
      else if (vis[now] == 1) {
        if (vis[t] == -1)vis[t] = 0;
      }
      degree[t]--;
      if (!degree[t])que.push(t);
    }
  }
  for (int i = 1;i <= n;++i) {
    if (vis[i] == 1)printf("A");
    else printf("B");
  }
  return 0;
}


目录
相关文章
|
XML Java 数据格式
如果Spring中有两个ID相同的Bean,会报错吗?
有位粉丝被 问到这样一个问题,说在Spring中,如果有两个ID相同的Bean,会不会报错?如果报错,会在哪个阶段报错? 这个问题也要分析具体的情况,才能完整的回答。我从三个方面来回答你的问题吧。
613 0
|
Windows
msi文件解包
msi文件解包
2117 1
msi文件解包
|
人工智能 Cloud Native Java
云应用开发平台CAP深度测评
云应用开发平台CAP是阿里云提供的一站式应用开发及管理平台,支持快速构建和迭代云上应用。通过丰富的Serverless + AI应用模板和先进的开发者工具,CAP帮助企业快速实现业务场景,提高研发、部署、运维效率。用户可免费试用,申请试用资格后,即可快速部署和使用。
|
机器学习/深度学习 监控 数据可视化
企业上网监控:Kibana 在网络监控数据可视化
在网络监控中,Kibana 作为一款强大的数据可视化工具,与 Elasticsearch 配合使用,可处理大量日志数据,提供丰富的可视化组件,帮助企业高效管理网络活动,保障信息安全。通过索引模式和数据映射,Kibana 能够组织和分类原始数据,支持深入分析和异常检测,助力企业识别潜在安全威胁。
226 5
|
运维 DataWorks 安全
DataWorks产品使用合集之如何在本地环境中安装Python包
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
存储 SQL 关系型数据库
PolarDB-X 存储引擎核心技术 | Lizard 多级闪回
本文介绍了数据库闪回技术,这是一种允许用户恢复到过去某个时间点状态的功能,无需依赖传统备份。闪回技术在误操作修复、数据恢复演练、问题诊断及合规审计等场景下尤为重要。
695 54
|
机器学习/深度学习 存储 搜索推荐
Elasticsearch与深度学习框架的集成案例研究
Elasticsearch 是一个强大的搜索引擎和分析引擎,广泛应用于实时数据处理和全文搜索。深度学习框架如 TensorFlow 和 PyTorch 则被用来构建复杂的机器学习模型。本文将探讨如何将 Elasticsearch 与这些深度学习框架集成,以实现高级的数据分析和预测任务。
261 0
|
存储 安全 Java
Go语言中的map为什么默认不是并发安全的?
Go语言的map默认不保证并发安全,以优化性能和简洁性。官方建议在需要时使用`sync.Mutex`保证安全。从Go 1.6起,并发读写map会导致程序崩溃,鼓励开发者显式处理并发问题。这样做的哲学是让代码更清晰,并避免不必要的性能开销。
229 0
|
安全 算法 Java
【Java小工匠聊密码学】--消息摘要--SHA3算法
1、SHA3概述 1.1 SHA3简介 由于近年来对传统常用Hash 函数如MD4、MD5、SHA0、SHA1、RIPENMD 等的成功攻击,美国国家标准技术研究所(NIST)在2005年、2006年分别举行了2届密码Hash 研讨会;同时于2007年正式宣布在全球范围内征集新的下一代密码Hash算法,举行SHA-3竞赛·新的Hash算法将被称为SHA-3,并且作为新的安全Hash标准,增强现有的FIPS 180-2标准。
5246 0
|
安全 物联网 网络虚拟化
路由与交换系列之基本IP ACL特性与配置
• 掌握基本IP ACL的原理 • 掌握ACL在企业网络中的应用 • 掌握基本IP ACL的配置方式 • 掌握基本IP ACL的验证效果
4524 8
  路由与交换系列之基本IP ACL特性与配置