AtCoder Beginner Contest 398-e

news/2025/3/24 20:20:17/文章来源:https://www.cnblogs.com/CMY2013/p/18787668

原题链接

这道题是一道交互题,他让我们实现一个程序来赢得这个游戏。因为输入是不确定的,所以我们要考虑必胜的策略。我们发现输入会导致出现一些满足条件的偶数环,但我们不考虑这些未知情况,只考虑初始的树中有几种已知情况满足条件,所以我们可以通过预处理来算出有几对点满足题目要求,如果有奇数对点满足要求,则输出\(First\)(因为有奇数对点,所以如果我们想拿到最后一对点,我们必须先手才行),否则输出\(Second\)(因为有偶数对点,所以如果我们想拿到最后一对点,我们必须后手才行)。然后我们就要根据先手后手来进行输入和输出,并用一个\(bool\)数组来维护两个点之间是否有边相连,输出时找到第一个满足条件且没有相连的边进行输出,最后遇到\(-1 -1\)时记得结束程序。

细节

每次输出后记得刷新缓存区(\(fflush(stdout)\)

#include<iostream>
#include<vector>
using namespace std;
int n;
int fa[110],siz[110],son[110],dep[110],top[110]; //LCA
vector<int> vec[110]; //存储每个节点有哪些子节点
vector<pair<int,int> > hf; //存储满足题目要求的点对的集合
bool f[110][110]; //标记两个点之间是否有边相连void dfs1(int u,int ff)
{fa[u]=ff;siz[u]=1;dep[u]=dep[ff]+1;for(auto v:vec[u]){if(v==ff) continue;dfs1(v,u);siz[u]+=siz[v];if(siz[v]>siz[son[u]]) son[u]=v;}
}void dfs2(int u,int t)
{top[u]=t;if(!son[u]) return;dfs2(son[u],t);for(auto v:vec[u]){if(v==fa[u] || v==son[u]) continue;dfs2(v,v);}
}int lc(int u,int v)
{while(top[u]!=top[v]){if(dep[top[u]]<dep[top[v]]) swap(u,v);u=fa[top[u]];}if(dep[u]<dep[v]) swap(u,v);return v;
}int main()
{cin>>n;int u,v;for(int i=1;i<n;i++){cin>>u>>v;vec[u].push_back(v);vec[v].push_back(u);f[u][v]=f[v][u]=true;}dfs1(1,0);dfs2(1,1); //树链剖分for(int i=1;i<=n;i++) {for(int j=i+1;j<=n;j++) {int la=lc(i,j); //求LCAif(!f[i][j] && (dep[i]+dep[j]-dep[la]-dep[fa[la]])%2==0) hf.push_back(make_pair(i,j)); //判断是否是奇数环,若不是将这对点加入集合中}}int tp;if(hf.size()&1) cout<<"First"<<"\n",tp=1;else cout<<"Second"<<"\n",tp=2; //判断First还是Secondfflush(stdout); //刷新缓存区while(true){if(tp==1){while(f[hf.back().first][hf.back().second]) hf.pop_back();f[hf.back().first][hf.back().second]=f[hf.back().second][hf.back().first]=true;cout<<hf.back().first<<' '<<hf.back().second<<"\n"; //输出fflush(stdout);cin>>u>>v; //输入if(u==-1 && v==-1) return 0; //赢了f[u][v]=f[v][u]=true; //标记}else{cin>>u>>v; //输入if(u==-1 && v==-1) return 0; //赢了f[u][v]=f[v][u]=true; //标记while(f[hf.back().first][hf.back().second]) hf.pop_back();f[hf.back().first][hf.back().second]=f[hf.back().second][hf.back().first]=true;cout<<hf.back().first<<' '<<hf.back().second<<"\n"; //输出fflush(stdout);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904143.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web-CodeInject

<?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);");eval("var_dump((Object)$_POST[1]);");:这行代码使用了eval()函数,这是一个非常危险的函数,因为它会执行传递给它的字符串作为PHP代码。这意味…

kettle插件-dm达梦数人大金仓Vastbase数据库插件

在国家大力倡导原创技术、推动信息技术应用创新(信创)的政策背景下,摆脱对国外技术的依赖、构建自主可控的信息技术体系成为重要发展方向。大数据作为信息技术的重要组成部分,国产大数据技术和产品迎来了前所未有的发展机遇。 信创旨在实现核心技术自主可控,保障国家信息安…

广义优势估计(GAE):端策略优化PPO中偏差与方差平衡的关键技术

广义优势估计(Generalized Advantage Estimation, GAE)由Schulman等人在2016年的论文中提出,是近端策略优化(PPO)算法的重要基础理论,也是促使PPO成为高效强化学习算法的核心因素之一。 GAE的理论基础建立在资格迹(eligibility traces)和时序差分λ(TD-λ)之上,为深入理解GA…

集合体系介绍、collection的使用--java进阶day09

1.集合体系结构 我们要学习的集合大体分为两种,一种是单列集合,一种是双列集合2.单列集合 单列集合又分为两个派系,分别为list接口和set接口,这两个接口皆是collection接口的子接口3.Collection接口既然要使用,那就必然要创建对象,但我们知道Collection是接口,不能实例化…

mybatis组件SqlSource的种类

SqlSource是mybatis重要的组件,是对你写的sql语句的简单封装。public interface SqlSource {BoundSql getBoundSql(Object parameterObject);}这个接口有很多种实现:VelocitySqlSource这个实现类是一个测试。实际上mybatis根本就不会使用这个实现类。 那么在mybatis内部是在哪…

静雅斋目录2

托管于国内企业顶想云的使用目录前情概要 本来已经有一个使用目录了,但是实在是受不了 GitHub 时不时卡壳的表现,就重新启用这个国内的搜索目录,外观要稍微差一点,但使用体验要好得多。 托管地址 托管于 顶想云 平台的目录样式 .编辑地址:顶想云.iframe-container { /* 容…

ARP高级欺骗-配置路由转发

引出问题: 当我们发起一次ARP欺骗之后,目标主机会出现断网情况。这种很容易就会被目标主机A发现。那我们怎么让目标主机发现不了自己被ARP欺骗了呢?问题描述: 1.受害主机A断网: 当目标主机A上网时,会进行TCP的连接,但是因为ARP欺骗之后,主机A的路由转发到的是主机B而不…

使用XIAO ESP32C6, XIAO扩展板和SHT31温湿度传感器构建温湿度计

我很高兴与您分享我的最新项目:我使用XIAO ESP32C6, XIAO扩展板和SHT31温湿度传感器构建的DIY温湿度计。我的目标是创造一种设备,可以帮助我监测家里的湿度水平,特别是因为我住在沿海热带地区,那里的湿度波动很大。这个想法来自于我需要保持一个舒适的室内环境。有时空气会…

可视化图解算法:判断一个链表是否为回文结构(回文链表)

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 给定一个链表,请判断该链表是否为回文结构。 回文是指该字符串正序逆序完全一致。 数据范围: 链表节点数 0≤…

使用ESP32和Gemini REST API语音输入调用带有自定义参数的函数

我们在建造什么? 在之前的教程中,我介绍了如何通过REST将ESP32连接到谷歌Gemini API以发送音频文件并对其进行转录。在本教程中,我将扩展到实际使用录制的音频而不是转录它-在这种情况下,打开和关闭LED环,加上根据语音命令改变LED的颜色。虽然我只是在操纵一个LED环,但你…

20244211 实验一《Python程序设计》实验报告

20244211 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 朱睿颖 学号:20244211 实验教师:王志强老师 实验日期:2025年3月18日 必修/选修: 专业选修课 1.实验内容熟悉Python开发环境; 练习Python运行、调试技能; 编写程序,练习…