首页 > 其他分享 >CF578E Walking! 反思--zhengjun

CF578E Walking! 反思--zhengjun

时间:2023-08-09 20:22:06浏览次数:32  
标签:... Walking .. -- CF578E back int push empty

WA 了十几发,清醒了之后发现自己是个 sb。

首先肯定贪心选,让每条链尽量长即可。

最后直接跑个欧拉回路即可(两个点的欧拉回路(ˉ▽ˉ;)...)。

分析一下,发现两个点的度数一定满足要求,无非就是是否联通。

那么如果两个点之间没有连边并且两个点都有自环,那么就会不连通。

只需要考虑这种特殊情况就行了。

考虑略微修改一下连边使得图联通

  • 拎出两个自环:

    ...L..R..L...R...
    .R..L...R..L.....
    
  • 这种情况只要改成这样就行了:

    .R.L..R..L...R...
    ....L...R..L.....
    
  • 然后,就没有然后了,已经做完了。

代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e5+10;
int n,cnt[2],nex[N];
int k,ans[N];
char a[N];
int cover(int x,int tag=0){
	int s;
	for(;x;x=nex[x])if(s=x,tag)ans[++k]=x;
	return s;
}
int top,stk[N],deg[2];
vector<pair<int,int> >to[2];
void add(int u,int v,int w){
	deg[u]++,deg[v]--;
	to[u].push_back({v,w});
}
void dfs(int u){
	for(;!to[u].empty();){
		int v=to[u].back().first,w=to[u].back().second;
		to[u].pop_back();
		dfs(v);
		stk[++top]=w;
	}
}
int main(){
	freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	scanf("%s",a+1),n=strlen(a+1);
	for(int i=1;i<=n;i++)cnt[a[i]=='R']++;
	vector<int>L,R;
	for(int i=n;i>=1;i--){
		if(a[i]=='L'){
			if(!R.empty())nex[i]=R.back(),R.pop_back();
			L.push_back(i);
		}else{
			if(!L.empty())nex[i]=L.back(),L.pop_back();
			R.push_back(i);
		}
	}
	vector<int>LL,LR,RL,RR;
	for(int x:L){
		char c=a[cover(x)];
		if(c=='L')LL.push_back(x);
		else LR.push_back(x);
	}
	for(int x:R){
		char c=a[cover(x)];
		if(c=='L')RL.push_back(x);
		else RR.push_back(x);
	}
	if(RR.empty()&&LL.empty()&&!RL.empty()&&!LR.empty()){
		int x=LR.back(),y=RL.back();
		LR.pop_back(),RL.pop_back();
		if(x<y){
			RR.push_back(nex[x]);
			LL.push_back(x);
			nex[x]=y;
		}else{
			LL.push_back(nex[y]);
			RR.push_back(y);
			nex[y]=x;
		}
	}
	for(int x:LL)add(0,a[cover(x)]=='L',x);
	for(int x:LR)add(0,a[cover(x)]=='L',x);
	for(int x:RL)add(1,a[cover(x)]=='L',x);
	for(int x:RR)add(1,a[cover(x)]=='L',x);
	top=0;
	if(deg[0]<deg[1])dfs(1);
	else if(deg[0]>deg[1])dfs(0);
	else dfs(0),dfs(1);
	for(int i=top;i>=1;i--)cover(stk[i],1);
	int cnt=0;
	for(int i=1;i<n;i++)cnt+=ans[i]>ans[i+1];
	printf("%d\n",cnt);
	for(int i=1;i<=n;i++)printf("%d ",ans[i]);
	for(int i=1;i<n;i++){
		if(a[ans[i]]==a[ans[i+1]])assert(0);
	}
	return 0;
}

标签:...,Walking,..,--,CF578E,back,int,push,empty
From: https://www.cnblogs.com/A-zjzj/p/17617912.html

相关文章

  • 开放式字幕——声画同步效果
    把窗口调到字母和图形也可以窗口-文本在下面调整字母时间想改样式就在基本图形里面......
  • oFono/dbus-python环境搭建以及简单认识
    关键词:D-Bus、oFono、dbus-python、ofonod等等。1.oFono环境搭建(Buildroot+QEMU)和启动1.1Buildroot配置ofonod+dbus-python配置oFono:Targetpackages->Networkingapplication->connman->enableofonosupport使能Python3:Targetpackages->Interpreterlanguage......
  • 设置Oracle视图查询权限的步骤(oracle视图查询权限)
    设置Oracle视图查询权限的步骤是向用户授予SELECT对设定视图的权限。Oracle提供了两种主要方式来授予用户查询视图的权限,分别是直接授权和使用角色授权。本文将介绍如何正确地设置授权,使用Oracle视图。 首先,要设置Oracle视图查询权限,必须具有包括CREATEVIEW权限和SELECT权限的......
  • 【专题】2023消费电子出海白皮书报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33393原文出处:拓端数据部落公众号在后疫情时代,全球经济和消费力的增长面临巨大考验。2022年,电脑、手机等产品的市场规模出现了小幅收缩调整。然而,在这样的环境下,各种消费电子的细分领域却展现出了强大的韧性。阅读原文,获取专题报告合集全文,解锁文......
  • MATLAB用改进K-Means(K-均值)聚类算法数据挖掘高校学生的期末考试成绩|附代码数据
    全文链接:http://tecdat.cn/?p=30832最近我们被客户要求撰写关于K-Means(K-均值)聚类算法的研究报告,包括一些图形和统计输出。本文首先阐明了聚类算法的基本概念,介绍了几种比较典型的聚类算法,然后重点阐述了K-均值算法的基本思想,对K-均值算法的优缺点做了分析,回顾了对K-均值改进......
  • 4--端口协议
    端口的作用一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机要区分不同的网络服务,显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 ......
  • Linux系统简介
    程序员必备的技能:一门编程语言:C语言、C++数据结构与算法:表、树、图、查找、排序、STL操作系统:Linux操作系统网络通信:TCP\IP协议簇(Socket套接字技术、TCP、UDP、FTP、HTTP等协议)数据库:MySQL界面设计:Qt操作系统课程内容:系统介绍、内存管理、文件管理、信号处理、进程管理......
  • 内存管理
    一、内存管理用户层STL智能指针/容器自动分配、释放调用C++C++new/delete调用CCmalloc/free调用POSIX\LinuxPOSIXbrk/sbrk调用内核Linuxmmap/munmap调用内核系统......
  • Stata广义矩量法GMM面板向量自回归PVAR模型选择、估计、Granger因果检验分析投资、收
    原文链接:http://tecdat.cn/?p=24016原文出处:拓端数据部落公众号摘要最近我们被要求撰写关于广义矩量法GMM的研究报告,包括一些图形和统计输出。面板向量自回归(VAR)模型在应用研究中的应用越来越多。虽然专门用于估计时间序列VAR模型的程序通常作为标准功能包含在大多数统计软件......
  • 架构师必备:商业选型与项目部署实践
    标题:架构师必备:商业选型与项目部署实践引言:作为一名架构师,商业选型和项目部署是你工作中至关重要的两个环节。商业选型涉及到选择合适的技术方案和工具,以满足企业的商业需求和目标。而项目部署则是将这些选型结果实际应用于项目中,确保项目的高效运行和顺利交付。本文将深入探讨商......