首页 > 其他分享 >P9757 [COCI2022-2023#3] Dirigent 题解

P9757 [COCI2022-2023#3] Dirigent 题解

时间:2024-03-07 13:11:06浏览次数:34  
标签:COCI2022 P9757 cnt int 题解 void add del il

分析

对于一个从小到大(按编号排序)的长度为 \(n\) 的序列 \(A\),有性质:相邻两个数之差的绝对值为 \(1\) 的数量为 \(n-1\)。

那么,对于这道题,能使环剪开一条边使其按编号排序,必有相邻两个 \(i,j\),满足 \((A_i-A_j=1)\) 的数量为 \(n-1\)。注意,因为这是个环,所以 \(i,j\) 大小关系不能确定。

记录一个 \(cnt\) 表示满足关系的数量,每次交换 \(x,y\) 的时候将原本 \(x,y\) 的贡献删掉,再将与 \(x,y\) 相邻的数的贡献删掉;增加同理。最后判断一下 \(cnt\) 是否等于 \(n-1\) 即可。

注:与 \(x,y\) 相邻的数可能有 \(y,x\) 两个,需要先判断一下。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline

const int N=3e5+10;
int n,q,a[N];
int X[N],cnt;

il void add(int x){
	if(a[(x-1)==0?n:(x-1)]==a[x]-1) ++cnt;
	return ;
}
il void del(int x){
	if(a[(x-1)==0?n:(x-1)]==a[x]-1) --cnt;
	return ;
}

il void solve(){
	cin>>n>>q;
	for(re int i=1;i<=n;++i) cin>>a[i],X[a[i]]=i;
	for(re int i=1;i<=n;++i) add(a[i]);
	for(re int i=1;i<=q;++i){
		int x,y;cin>>x>>y;
		del(X[x]),del(X[y]);
		if(((X[x]+1)==n+1?1:(X[x]+1))!=X[y]) del((X[x]+1)==n+1?1:(X[x]+1));
		if(((X[y]+1)==n+1?1:(X[y]+1))!=X[x]) del((X[y]+1)==n+1?1:(X[y]+1));
		swap(a[X[x]],a[X[y]]),swap(X[x],X[y]);
		add(X[x]),add(X[y]);
		if(((X[x]+1)==n+1?1:(X[x]+1))!=X[y]) add((X[x]+1)==n+1?1:(X[x]+1));
		if(((X[y]+1)==n+1?1:(X[y]+1))!=X[x]) add((X[y]+1)==n+1?1:(X[y]+1));	
		if(cnt==n-1) cout<<"DA\n";
		else cout<<"NE\n";	
	}
	return ;
}

signed main(){
	solve();
	return 0;
}

标签:COCI2022,P9757,cnt,int,题解,void,add,del,il
From: https://www.cnblogs.com/harmisyz/p/18058657

相关文章

  • 常见问题解决 ---
    问题描述Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errorsjava.lang.AssertionError:FailedtoreadC:\Users\**\updatedBrokenPlugins.dbatcom.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:54)atcom.intellij......
  • CSP认证2022.12 452分题解
    A、现值计算题解题目简单易懂,直接写就行了。importmathn,i=map(float,input().split())n=int(n)a=list(map(int,input().split()))ans=0.00forjinrange(n+1):ans=ans+math.pow(1+i,-j)*a[j]print(ans)B、训练计划题解显然是个......
  • .NET Core WebAPI项目部署iis后Swagger 404问题解决
    .NETCoreWebAPI项目部署iis后Swagger404问题解决前言之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解下iis如何部署WebAPI项目。环境准备iisASPNETCoreModuleV2重点.NETCoreRuntimeiis的配置这里就不讲了,主要讲解......
  • 【转】[Java]引入Redisson可能会出现项目启动失败问题解决
    转自:https://blog.csdn.net/bengbuguang4321/article/details/121951650在启动项目时,Redisson自己会启动一个Redisson连接池,尝试连接redis,这时候如果遇到网络不通就会出现问题,因为redis连接不上,导致项目启动不了解决方法是:1、重新空实现了一个RedissonClient/***@ClassNa......
  • ABC323E Playlist 题解
    考虑第\(i\)时刻时,第\(j\)首歌刚好结束与第\(i-j\)时刻有关,因此设\(dp_{i,j}\)表示第\(i\)时刻第\(j\)首歌刚好结束的概率,那么\(dp\)转移方程为:\[dp_{i,j}=\sum\limits_{k=1}^ndp_{i-t_j,k}\]很容易想到记录\(\sum\limits_{j=1}^ndp_{i,j}\)的值为\(sum_i\),......
  • 初三组合恒等式和二项式定理练习 题解
    A.多项式推柿子:\[\begin{aligned}&\sum\limits_{k=0}^{n}b_{k}(x-t)^{k}\\=&\sum\limits_{k=0}^{n}b_{k}\sum\limits_{i=0}^{k}\binom{k}{i}x^{i}(-t)^{k-i}\\=&\sum\limits_{0\leqslanti\leqslantk\leqslantn}\binom{k}{i}b_{......
  • 2024 联合省选 题解
    D1T1季风考虑要求\(\begin{cases}\sum\limits_{i=0}^{m-1}(x'_i+x_{i\bmodn})=x\\\sum\limits_{i=0}^{m-1}(y'_i+y_{i\bmodn})=y\\|x'_i|+|y'_i|\lek\end{cases}\)发现其等价于\(|x-\sum\limits_{i=0}^{m-1}x_{i\bmodn}|+|y-\sum\l......
  • Chests and Keys 题解
    题意:给定\(n,m\)表示存在\(n\)个宝箱和\(m\)把钥匙,第\(i\)把钥匙需要\(b_i\)元,第\(i\)个宝箱内部有\(a_i\)元。现在进行一场游戏,Bob是本场游戏的玩家,而Alice则是场景布置者,Alice可以给每个宝箱上一些锁(第\(j\)种锁需要第\(j\)种钥匙打开)如果Bob可以购......
  • Linux使用问题之长时间连接ssh不操作自动断开问题解决方案
    1.概要一般情况下,在使用SSHSecureShellClient的过程中,经常会遇到当用SSHSecureShell连接登录Linux后,如果几分钟没有任何操作,连接就会自动断开,提示Serverresponded"Connectionclosed.",必须重新登录才可以。2.原理主要由以下两个参数控制:ClientAliveInterval:指定了服......
  • springboot 应用程序 pom节点版本冲突问题解决思路
    springboot应用程序pom节点版本冲突问题解决思路一、首先 mavenhelper 查看是否有冲突 conflicts 二、allDenpendencies  查询如poi 查询冲突 ps: <scope>compile</scope>  compile:这是默认的依赖项范围。指定为compile的依赖项将在编译、测试和......