Codeforces Round 868 (Div. 2)

news2024/10/7 20:36:04

Problem - D - Codeforces

思路:

  1. 首先,一个位置至多贡献1,不然就是0.如[l1,r]与[l2,r]都是回文串(l1<l2)
    1. 若(l1+r)/2<=l2,即[l2,r]本身就是[l1,r]回文串右边的一部分,那么他的贡献在[l1,r]左边已经计算过。
    2. 如果(l1+r)2/>l2,我们显然可以在[l1,r]回文中心右边找到l2的对称点l2',显然[l2,r]=[l1,l2'],在到达r前,[l2,r]的贡献还是被计算过了。
  2. 观察到k<=20<26个字母。
  3. 所以对于每次c[i],我们完全可以凑ccccc(c为字母符号),凑一个贡献加1。
  4. 对于不用贡献的部分,我们可以凑abcabc。所以,显然我们已开始需要使用abc,才能使得他后面不计贡献,ci>=3,所以可以一开始就使用。
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
#define int              long long
const int N = 2e6 + 10;

void mysolve()
{
	int n,k;
	string s="";
	cin>>n>>k;
	vector<int>x(k+1,0),c(k+1,0);
	for(int i=1; i<=k; ++i)cin>>x[i];
	bool flag=1;
	for(int i=1; i<=k; ++i)
		{
			cin>>c[i];
			if(c[i]-c[i-1]>x[i]-x[i-1]||c[i]>x[i])flag=0;//不合法
		}
	if(!flag)
		{
			cout<<"NO"<<endl;
			return;
		}
	string add;
	while((int)add.size()<n)add+="abc";
	int st=0;
	char e='c';
	for(int i=1; i<=k; ++i)
		{
			if(i==1)
				{
					s+="ab";//先把abc用了,后面凑他就没有贡献
					s+=string(c[1]-2,e++);
					int len=x[1]-(int)s.size();
					s+=add.substr(st,len),st+=len;
					continue;
				}
			s+=string(c[i]-c[i-1],e++);
			int len=x[i]-(int)s.size();
			s+=add.substr(st,len),st+=len;
		}
	int len=n-(int)s.size();
	s+=add.substr(st,len),st+=len;
	cout<<"YES"<<endl;
	cout<<s<<endl;
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll t=1;
	cin >> t;
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

Problem - E - Codeforces

 思路:

  1. 容易看出可以看成是每个环的异或和,我们只需要讨论一个环的不同长度len的sg值即可
  2. 发现环切一次就变成链了(笑),所以我们实际只需要计算一条链不同长度的sg值即可。而一个环的长度为len的sg值,就是他第一次切后的所有可能链的sg值的集合的mex,即Circle[x]=mex \left \{ chain[x-r], chain[x-r+1],... , chain[x-l] \right \}
  3. 那怎么求一条链的sg值等价于,显然一条链又可以分成两条,这两条的sg值异或和状态就是这条链可以到达的一个sg值状态。那么这条链的sg值就是chain[x]=mex\left \{ chain[i]\bigoplus chain[x-i], \\.... \\ ,\\chain[x]\bigoplus chain[0] \right \}(0<=i<=x)

打表出来就很容易观察出每个环长度的sg值 

#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
#define int              long long
const int N = 2e5 + 10;
int n,l,r;
vector<int>edge[N];
bool vis[N];
int dp[N],cnt;
int sg(int x)
{
	if(x<=0)return 0;
	if(~dp[x])return dp[x];
	set<int>s;
	for(int i=l; i<=r; ++i)for(int j=0; j<=x-i; ++j)s.insert(sg(j)^sg(x-i-j));//链x的sg值对于他切掉i长度后剩余的两部分j与x-i-j的sg异或和
	int ans=0;
	while(s.count(ans))ans++;
	return dp[x]=ans;
}

void dfs(int u)//dfs搜索一个环的节点数,即长度
{
	cnt++;
	vis[u]=1;
	for(auto v:edge[u])if(!vis[v])dfs(v);
}
void mysolve()
{
	//sg打表
//	cin>>l>>r;
//	memset(dp,-1,sizeof(dp));
//	for(int i=1; i<=50; ++i)//求长度为i的环的sg值
//		{
//			set<int>s;
//			for(int j=l; j<=min(r,i); ++j)s.insert(sg(i-j));//即环切掉i长度的所有sg值的mex函数
//			int ans=0;
//			while(s.count(ans))ans++;
//			cout<<ans<<endl;
//		}
	cin>>n>>l>>r;
	for(int i=1; i<=n; ++i)
		{
			if(i<l||i>(l+r-1))dp[i]=0;//打表出来的sg值规律
			else dp[i]=i/l;
		}
	int x,y;
	for(int i=1; i<=n; ++i)cin>>x>>y,edge[x].push_back(y),edge[y].push_back(x);
	int ans=0;
	for(int i=1; i<=n; ++i)
		if(!vis[i])cnt=0,dfs(i),ans^=dp[cnt];//答案就是所有环的异或和
	if(ans!=0)cout<<"Alice"<<endl;
	else cout<<"Bob"<<endl;
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll t=1;
	//cin >> t;
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python程序的执行过程

哈喽&#xff0c;大家好&#xff0c;五一快乐呀&#xff0c;都去哪里旅游了呢&#xff1f;再游玩之余也花点时间来学习学习&#xff0c;让自己更强哟。这期就给大家分享的是Python程序执行的过程学习。 之前已经给大家介绍了Python语言的简介、Python环境的安装、IDE的选择与安…

4 斐波那契数列

4 斐波那契数列 作者: Turbo时间限制: 1S章节: 递归 问题描述 : 斐波那契数列的排列是&#xff1a;0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89&#xff0c;…

CTF-PHP反序列化漏洞2-利用魔法函数

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

.net 智慧手术麻醉管理系统 WCF框架

实用性&#xff1a; 充分考虑科室业务场景实用性&#xff0c;把满足临床需要为第一要素进行考虑。具有操作简单、提示清晰、逻辑性强&#xff0c;直观简洁等特点。 灵活可自定义&#xff1a; 软件设计采用模块式、组件式开发&#xff0c;根据临床需要可根据实际业务进行组合…

【MATLAB第26期】区间预测 | 基于MATLAB的LASSO分位数回归预测模型 负荷预测数据

【MATLAB第26期】区间预测 | 基于MATLAB的LASSO分位数回归预测模型 负荷预测数据 一、效果预览 MSE: 22.9684327801807 %15分钟 21.6725387054707%30分钟 24.0995456594418%45分钟 21.3992361173462%60分钟 二、数据选择 案例数据&#xff1a;两个月负荷数据3599*30&#x…

网络编程 总结三

一、并发服务器模型 【1】 循环服务器 1>一次只能处理一个客户端的请求&#xff0c;等待这个客户端退出后&#xff0c;才能处理下一个客户端 2>缺点&#xff1a;循环服务器所处理的客户端不能有耗时操作 //*****模型****** sfd socket(); bind(); listen(); while(1)…

springboot websocket通信

目录 一、websocket是什么 二、实现websocket 2.1参考学习b站资料&#xff08;一定要看&#xff0c;前后端详细&#xff09; 2.2学习配套代码 一、websocket是什么 WebSocket_ohana&#xff01;的博客-CSDN博客 二、实现websocket 2.1参考学习b站资料&#xff08;一定要看…

4 异常机制--数组、切片、算法【Go语言教程】

4 异常机制–数组、切片、算法【Go语言教程】 1 异常机制 1.1 处理错误 Go 语言追求简洁优雅&#xff0c;所以&#xff0c;Go 语言不支持传统的 try…catch…finally 这种处理。Go 中引入的处理方式为&#xff1a;defer, panic, recover这几个异常的使用场景可以这么简单描述…

【小沐学Python】Python实现Web服务器(Flask框架扩展:Flask-Admin)

文章目录 1、简介1.1 flask1.2 flask-admin 2、安装2.1 安装库2.2 打印库版本 3、初始化4、添加独立视图&#xff08;BaseView&#xff09;4.1 管理接口索引页4.2 自定义视图 5、添加模型视图&#xff08;ModelView&#xff09;6、添加特殊视图6.1 Managing Files & Folder…

VS2019配置redis客户端的c++开发环境

目录 需要的开源库&#xff1a; 具体步骤&#xff1a; 遇到的问题&#xff1a; 1. 确保每个项目使用的配置解决方案管理器一样 2.CMAKE 的安装 3. 使用 CMAKE 的路径配置 4. redis 编译报错&#xff1a;jemalloc/jemalloc.h没有这个文件&#xff0c;或者找不到.dll 5. linux …

【Linux】初识Linux --指令Ⅰ

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法&#xff0c;Linux…感兴趣就关注我吧&#xff01;你定不会失望。 目录 1.ls 显示当前目录下的文件内内容2.pwd-显示用户当前所在的目录3.cd-改变工作目录。将当前工作目录改变到指定的目…

C++ STL-deque

deque&#xff1a;双端队列 目录 deque&#xff1a;双端队列 1、 基本介绍 2、使用方法 2.1、 头文件 2.2、 定义 2.3、 方法函数 3、排序 1、 基本介绍 首尾都可插入和删除的队列为双端队列。 deque容器是连续的空间&#xff0c;其他连续的行空间还有 array 和 vect…

E. Multihedgehog(多叉树找root节点)

Problem - E - Codeforces 有人给Ivan一个奇怪的生日礼物&#xff0c;这是一只刺猬 - 一个连通的无向图&#xff0c;其中一个顶点的度至少为3&#xff08;我们称其为中心&#xff09;&#xff0c;而所有其他顶点的度数均为1。Ivan认为刺猬太无聊了&#xff0c;决定自己制造k-多…

总结838

四月结束&#xff0c;五月来临。又到了月度总结与规划的时候了。 四月总结&#xff1a;高等数学原计划复习完18讲内容&#xff0c;刷完对应的习题。如今还剩三讲&#xff0c;本可以看完&#xff0c;但因为后面分专题了&#xff0c;还没确定是数1还是数2.所以耽搁了一下。英语原…

SG函数(博弈论)

一&#xff0c;定义 对于满足以下条件的公平二人游戏&#xff0c;均可以用sg函数&#xff08;暴搜&#xff09;获得答案 人数2人 两人交替进行合法操作&#xff0c;无法进行者LOSE对 于游戏的任意一种可能的局面&#xff0c;合法的操作集合只取决于这个局面的本身&#xff0c;…

掌握 Python 接口自动化测试理论,深度解读测试框架源码

目录&#xff1a;导读 引言 一、什么是接口测试、为什么要做接口测试 1、什么是接口测试 2、为什么要做接口测试 二、接口测试的流程 1、接口测试的流程 2、为什么要写测试用例 3、接口测试设计要点 三、python接口自动化-requests的应用 1、requests简介 2、reques…

Winform从入门到精通(37)——FolderBrowserDialog(史上最全)

文章目录 前言1、Name2、Description3、RootFolder4、SelectedPath5、ShowNewFolderButton前言 当需要获取一个可以通过用户自由选择路径的时候,这时候就需要FolderBrowserDialog控件 1、Name 获取FolderBrowserDialog对象 2、Description 用于指示对话框的描述,如下: …

Doris(22):Doris的函数—地理位置函数

1 ST_AsText(GEOMETRY geo) 将一个几何图形转化为WKT(Well Known Text)的表示形式 SELECT ST_AsText(ST_Point(24.7, 56.7)); 2 ST_Circle(DOUBLE center_lng, DOUBLE center_lat, DOUBLE radius) 将一个WKT(Well Known Text)转化为地球球面上的一个圆。其中center_lng表…

20230502 强化学习与反馈控制_利用自然决策方法设计最优自适应控制器

目录&#xff1a;强化学习与反馈控制_利用自然决策方法设计最优自适应控制器 总体介绍强化学习二级目录三级目录 总体介绍 本文描述了利用强化学习原理为离散和连续系统设计反馈控制器&#xff0c;该控制器结合了自适应控制和最优控制的特点。自适应控制和最优控制代表了设计反…

【ElasticSearch】EQL操作相关

文章目录 EQL操作基础语法数据准备数据窗口搜索统计符合条件的事件事件序列 安全检测数据准备查看数据导入情况获取 regsvr32 事件的计数检查命令行参数检查恶意脚本加载检查攻击成功可能性 EQL操作 EQL 的全名是 Event Query Language (EQL)。事件查询语言&#xff08;EQL&…