Codeforces Round 941 (Div. 2)(A,B,C,D,E)

news2024/11/23 22:11:11

比赛链接

这场难度不高,基本没考算法,全是思维题。B是推结论,C是博弈,D是构造,需要对二进制有一定理解,E是思维题,2300分的暴力和模拟。


A. Card Exchange

题意:

您有 n n n 张牌,每张牌上都写着一个数字,还有一个固定整数 k k k 。你可以多次进行下面的运算:

  • 从手牌中任意选择 k k k 张数字相同的纸牌。
  • 将这些牌换成 k − 1 k-1 k1 张牌,每张牌都可以替换成你选择的任何数字(包括你刚刚换的牌上写的数字)。

下面是第一个例子的一个可能的操作顺序,其中有 k = 3 k=3 k=3

在这个过程结束时,你手中最少有多少张牌?

思路:

如果一开始手上就没有 k k k 张相同的牌,那么我们一次操作都做不了,这样答案就是 n n n

如果有 k k k 张及以上相同的牌,那么我们删掉这 k k k 张,可以另选一张别的牌,把 k − 1 k-1 k1 张这样的牌加入进来。以此类推,我们一定可以把牌的个数删到 k − 1 k-1 k1 张,这时因为个数不够就不能再操作了。

code:

#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
 
int T,n,k;
 
int main(){
	cin>>T;
	while(T--){
		cin>>n>>k;
		map<int,int> mp;
		for(int i=1,t;i<=n;i++){
			cin>>t;
			mp[t]++;
		}
		int maxx=0;
		for(auto [val,cnt]:mp)
			maxx=max(maxx,cnt);
		printf("%d\n",(maxx>=k)?k-1:n);
	}
	return 0;
}

B. Rectangle Filling

题意:

有一个由白色和黑色方格组成的 n × m n \times m n×m 网格。在一次操作中,您可以选择任意两个相同颜色的方格,并将它们之间的子方格中的所有方格都染成相同的颜色。

具体来说,如果您选择了位置 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2) ,这两个位置当前的颜色都是 c c c ,那么就可以将 ( x , y ) (x, y) (x,y) (其中 min ⁡ ( x 1 , x 2 ) ≤ x ≤ max ⁡ ( x 1 , x 2 ) \min(x_1, x_2) \le x \le \max(x_1, x_2) min(x1,x2)xmax(x1,x2) min ⁡ ( y 1 , y 2 ) ≤ y ≤ max ⁡ ( y 1 , y 2 ) \min(y_1, y_2) \le y \le \max(y_1, y_2) min(y1,y2)ymax(y1,y2) 的颜色设置为 c c c

此图显示了网格上两种可能的操作序列:

在进行任意次数(可能为零)的运算后,网格中所有方格的颜色是否可能相同?

思路:

假设我们把所有位置涂成白色,一个粗暴的想法是,如果两个对角位置(左上和右下,或者左下和右上)都是白色的就好了,这样选上这一对对角位置一次操作就可以了。但是事情不会这么顺利,对角位置有可能是黑的。

不过既然我们要把所有黑的位置都变成白的,所以不如我们先把一对对角位置清理出来,这样再选这对对角位置把其他位置清理成白色就行了。

拿左上角举例,如果要清理出来左上角,就必须保证第一行至少有一个白色位置,第一列至少有一个白色位置,同理其他角落位置。如果清理出左上和右下,就要保证第 1 1 1 行,第 n n n 行,第 1 1 1 列,第 m m m 列都各有至少一个白色位置。同理清理出左下和右上也需要上面这个条件。当一个角落位置本来就是白的,我们可以看作它所在行列同样是存在至少一个白色位置。因此我们只需要判断上面情况成立就行了。

同理涂成黑色的情况。

code:

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int maxn=505;
 
int T,n,m;
string s[maxn];
 
int main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			cin>>s[i];
			s[i]=" "+s[i];
		}
		vector<bool> f(8,false);
		for(int i=1;i<=m;i++)
			if(s[1][i]=='W')f[0]=true;
			else f[1]=true;
		for(int i=1;i<=m;i++)
			if(s[n][i]=='W')f[2]=true;
			else f[3]=true;
		for(int i=1;i<=n;i++)
			if(s[i][1]=='W')f[4]=true;
			else f[5]=true;
		for(int i=1;i<=n;i++)
			if(s[i][m]=='W')f[6]=true;
			else f[7]=true;
		if((f[0]&f[2]&f[4]&f[6]) || (f[1]&f[3]&f[5]&f[7]))puts("YES");
		else puts("NO");
	}
	return 0;
}

C. Everything Nim

题意:

爱丽丝和鲍勃正在玩一个关于 n n n 堆石头的游戏。轮到每个棋手时,他们都会选择一个正整数 k k k ,这个正整数最多等于最小的非空堆的大小,然后从每个非空堆中一次性取出 k k k 个石子。第一个无法下棋的棋手(因为所有棋子都是空的)就算输。

既然爱丽丝先下,那么如果双方都以最佳方式下棋,谁会赢呢?

思路:

因为石子的顺序没有影响,所以不妨先排个序,因为是同时取走,所以石子个数相同的石子堆之间是一直保持相同的,所以我们还能去个重。然后因为我们在取第 i i i 堆石子的时候,第 i − 1 i-1 i1 堆石子一定被取完了,在取第 i i i 堆石子的时候实际上我们是在对剩下的 a i − a i − 1 a_i-a_{i-1} aiai1 个石子来取。因此我们让第 i i i 堆石子的个数等于 a i − a i − 1 a_i-a_{i-1} aiai1,这样同时对所有石子堆取石子就变成了先取最前面的非空石子堆,取完再依次取后面的石子堆

因为我们一次至少取一个石子,至多直接将这堆石子都取走。所以我们如果是先手的话,除非这堆石子只有一个石子,这时我们只能取走这堆石子。当石子堆石子个数大于 1 1 1 时,我们其实是拥有决定谁来取下一个石子堆的权利的。

比如说如果我们想要下一堆石子我们先取,我们只需要将这个石子堆取到只剩一个,然后让对方取走这堆最后一个石子即可。反之我们直接取完这堆石子即可。

因为一个局面下一定只有必胜或者必败两种局面,因此先手或后手取下一堆石子一定一个为必胜的,一个为必败的。我们能决定谁来面对必胜局面,谁来面对必败局面,这时我们就已经赢了,也就是说 先手面对的石子堆的石子个数大于 1 1 1 的局面 是必胜的。

不过有可能我们一开始面对的若干个石子堆的石子个数等于 1 1 1,并不大于 1 1 1这时就是两个人轮流取,谁先取到最后一堆石子或者石子个数大于 1 1 1 的石子堆,谁就赢了

code:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=2e5+5;
 
int T,n,a[maxn];
 
int main(){
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i];
		sort(a+1,a+n+1);
		n=unique(a+1,a+n+1)-a-1;
		for(int i=n;i>=1;i--)a[i]-=a[i-1];
		
		bool win=true;
		for(int i=n-1;i>=1;i--)
			if(a[i]==1)win^=1;
			else win=true;
		
		puts((win)?"Alice":"Bob");
	}
	return 0;
} 

D. Missing Subsequence Sum

题意:

给你两个整数 n n n k k k 。构造一个大小最多为 25 25 25 的非负整数序列 a a a ,使得下列条件成立。

  • 没有和为 k k k a a a 的子序列。
  • 对于 v ≠ k v \ne k v=k 所在的所有 1 ≤ v ≤ n 1 \le v \le n 1vn ,存在一个和为 v v v a a a 的子序列。

如果 b b b 可以从 a a a 中删除几个(可能是零个或全部)元素,而不改变其余元素的顺序,那么序列 b b b 就是 a a a 的子序列。例如, [ 5 , 2 , 3 ] [5, 2, 3] [5,2,3] [ 1 , 5 , 7 , 8 , 2 , 4 , 3 ] [1, 5, 7, 8, 2, 4, 3] [1,5,7,8,2,4,3] 的子序列。

可以证明,在给定的约束条件下,解总是存在的。

思路:

因为 n = 1 0 6 n=10^6 n=106,而数组里只有 25 25 25 个数,因为我们表示数字用的二进制,而且 2 20 > 1 0 6 2^{20}>10^6 220>106,这提示这个题我们需要用二进制来凑。

对于 1 ∼ k − 1 1\sim k-1 1k1 的部分,我们直接用二的次幂来凑,把 2 0 , 2 1 , 2 2 , … , 2 x ( 2 x + 1 − 1 ≤ k − 1 ) 2^0,2^1,2^2,\dots,2^x\quad(2^{x+1}-1\le k-1) 20,21,22,,2x(2x+11k1),加入进来,这样可以表示到 2 x + 1 − 1 2^{x+1}-1 2x+11,再加入一个 k − 1 − ( 2 x + 1 − 1 ) = k − 2 x + 1 k-1-(2^{x+1}-1)=k-2^{x+1} k1(2x+11)=k2x+1 即可。这样凑完,我们就不能加入任何一个 1 ∼ k − 1 1\sim k-1 1k1 的数了

对于 k + 1 ∼ n k+1\sim n k+1n 的部分。考虑到我们可以凑出 1 ∼ k − 1 1\sim k-1 1k1 的所有数,所以高位我们只要能凑出 k k k 的倍数就行了,一个倍数到下一个倍数之间正好就差 1 ∼ k − 1 1\sim k-1 1k1

凑倍数同理还是用二的次幂来凑,把 2 0 ∗ k , 2 1 ∗ k , 2 2 ∗ k , … , 2 x ∗ k ( 2 x ∗ k ≤ n ) 2^0*k,2^1*k,2^2*k,\dots,2^x*k\quad(2^x*k\le n) 20k,21k,22k,,2xk(2xkn),但是我们不能加入 2 0 ∗ k 2^0*k 20k 也就是 k k k,作为替代,我们加入 3 ∗ k 3*k 3k 即可(这样可以保证凑出 k k k ≥ 2 k \ge 2k 2k 倍数,可以这样来想,如果 a ∗ k a*k ak a a a 二进制第 0 0 0 位为 1 1 1,那么 a − 3 a-3 a3 0 0 0 位为 0 0 0,剩下的部分就可以用若干二的次幂来凑)。

不过这样会剩下 k + 1 ∼ 2 k − 1 k+1\sim 2k-1 k+12k1 的部分,我们直接加入 k + 1 k+1 k+1 即可,因为我们可以凑出 1 ∼ k − 1 1\sim k-1 1k1 的所有数,所以我们带上 k + 1 k+1 k+1 就可以凑出 k + 1 ∼ 2 k k+1\sim 2k k+12k 的所有数。

因为我们一直插入的都是二的次幂,它增长的很快,对于 1 ∼ k − 1 1\sim k-1 1k1 的部分我们最多会插入 ⌊ log ⁡ 2 k ⌋ + 1 \left\lfloor\log_2k\right\rfloor+1 log2k+1 个数,对于 k + 1 ∼ n k+1\sim n k+1n 的部分我们最多会插入 ⌊ log ⁡ 2 ⌊ n k ⌋ ⌋ + 1 \left\lfloor\log_2{\left\lfloor{\dfrac nk}\right\rfloor}\right\rfloor+1 log2kn+1,总的加入的数的个数 ⌊ log ⁡ 2 k ⌋ + 1 + ⌊ log ⁡ 2 ⌊ n k ⌋ ⌋ + 1 ≤ log ⁡ 2 k + log ⁡ 2 n k + 2 \left\lfloor\log_2k\right\rfloor+1+\left\lfloor\log_2{\left\lfloor{\dfrac nk}\right\rfloor}\right\rfloor+1\le\log_2k+\log_2{{\dfrac nk}}+2 log2k+1+log2kn+1log2k+log2kn+2 = log ⁡ 2 k + log ⁡ 2 n − log ⁡ 2 k + 2 =\log_2k+\log_2{n}-\log_2k+2 =log2k+log2nlog2k+2 = log ⁡ 2 n + 2 =\log_2{n}+2 =log2n+2

n n n 最多就 1 0 6 10^6 106,加入的总个数反正超不过 25 25 25

code:

#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
 
int T,n,k;
 
int main(){
	cin>>T;
	while(T--){
		cin>>n>>k;
		vector<int> ans;
		int i;
		for(i=0;(1<<i+1)<k;i++)ans.push_back((1<<i));
		if(k-(1<<i)>0)ans.push_back(k-(1<<i));
		
		if(k+1<=n)ans.push_back(k+1);
		if(2*k<=n)ans.push_back(2*k);
		if(3*k<=n)ans.push_back(3*k);
		for(int j=4;j*k<=n;j<<=1)
			ans.push_back(j*k);
		
		cout<<ans.size()<<endl;
		for(auto x:ans)
			cout<<x<<" ";
		cout<<endl;
	}
	return 0;
}

E. Folding Strip

题意:

有一张纸条,上面是长度为 n n n 的二进制字符串 s s s 。您可以将纸条折叠在任意一对相邻数字之间。

如果在折叠后,位于上方或下方的所有字符都匹配,则认为一组折叠有效。请注意,所有折叠都是同时进行的,因此折叠之间的字符不必匹配。

例如,这些是 s = 110110110011 s = \mathtt{110110110011} s=110110110011 s = 01110 s = \mathtt{01110} s=01110 的有效折叠:

[外链图片转存中...(img-18edbzDl-1715100149773)]

折叠条的长度是指完成所有折叠后从上面看到的长度。因此,对于上面的两个例子,经过上面所示的折叠后,长度分别为 7 7 7 3 3 3

请注意,对于上述 s = 01110 s = \mathtt{01110} s=01110 的折叠,如果我们单独进行两个折叠中的任何一个,这都不是一个有效的折叠。然而,由于我们在完成所有折叠之前不检查有效性,因此这个折叠是有效的。

在完成一组有效的折叠后,你能形成的最小长度条带是多少?

思路:

折一折之后发现一个性质,就是如果有连续的奇数个 0 0 0 1 1 1 时,我们可以通过折过去再折回来(就是示例图片的第二个折法)的操作,把这连续的相同字符变成一个字符,而且不影响也不需要看其他位置。再推一下,发现连续的偶数个相同字符我们也可以通过这种折法变成两个相同字符

如果我们事先将原本的字符串处理一下,把奇数个相同字符直接缩成一个字符,偶数个相同字符直接缩成两个字符,应该会好做一些。但是害怕处理后一些本来可以对称折起来的方法就不能折了,不过不用担心,如果可以对称折起来,说明两边完全一样,这样处理后两边仍然是完全一样的,还是可以对称折起来,所以处理一下不影响。

处理后的字符串会变成一串 01 01 01 串,然后偶尔某个位置是两个相同字符,然后接下来又是一串 01 01 01。形如 010101 1010 01 … \color{red}010101\color{blue}1010\color{red}01\color{black}\dots 010101101001。对这个串,我们可以在所有两个相同字符的位置折一下,两边正好对称。我们要找折完后得到的纸条的长度,可以去模拟对折的时候左右端点的变化的过程,然后把到达的最左边和最右边的位置记录一下,最后左右端点之间的长度就是答案了。

code:

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int maxn=2e5+5;

int T,n;
string s;

void ggbond(vector<int>& bond){
	int len=0;
	for(int l=1,r=1;l<=n;l=r){
		while(r<=n && s[r]==s[l])r++;
//		cout<<l<<" "<<r<<endl;
		len++;
		if(((r-l)&1)==0){
			bond.push_back(len);
			len=1;
		}
	}
	bond.push_back(len);
}

int main(){
	cin>>T;
	while(T--){
		cin>>n>>s;
		s=" "+s;
		vector<int> bond;
		ggbond(bond);
		
		int l=0,r=0;
		for(int i=0,t=0;i<bond.size();i++){
			int len=bond[i];
			if(i&1){
				t=t-len;//向左翻折
				l=min(l,t);
			}
			else {
				t=t+len;//向右翻折
				r=max(r,t);
			}
		}
		
		cout<<r-l<<endl;
	}
	return 0;
}

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

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

相关文章

纯血鸿蒙APP实战开发——一镜到底“页面转场”动画

介绍 本方案做的是页面点击卡片跳转到详情预览的转场动画效果 效果图预览 使用说明 点击首页卡片跳转到详情页&#xff0c;再点击进入路由页面按钮&#xff0c;进入新的路由页面 实现思路 首页使用了一种视觉上看起来像是组件的转场动画&#xff0c;这种转场动画通常是通过…

WordPress 管理员密码重置方法汇总

最近明月碰到一个 WordPress 站长求助咨询&#xff0c;说是自己 WordPress 站点的管理员密码被恶意篡改了&#xff0c;对 WordPress 了解的都知道这一般都是恶意代码造成的&#xff0c;问题大多出在使用了所谓的破解版、去授权版的插件或者主题被植入了恶意代码、后门木马。明月…

K8S安装并搭建集群

1. 先给每台机器安装docker环境 卸载旧的docker yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 配置docker的yum库 yum install -y yum-utilsyum-config-manager --a…

miniconda环境管理器安装及jupyter下载

1.miniconda简介 Miniconda是一款小巧的python环境管理工具&#xff0c;安装包大约只有50M多点&#xff0c;其安装程序中包含conda软件包管理器和Python。一旦安装了Miniconda&#xff0c;就可以使用conda命令安装任何其他软件工具包并创建环境等。 2.下载miniconda 查看需要的…

大模型时代下两种few shot高效文本分类方法

介绍近年(2022、2024)大语言模型盛行下的两篇文本分类相关的论文&#xff0c;适用场景为few shot。两种方法分别是setfit和fastfit&#xff0c;都提供了python的包使用方便。 论文1&#xff1a;Efficient Few-Shot Learning Without Prompts 题目&#xff1a;无需提示的高效少…

找不到msvcp100.dll,无法继续执行代码的问题详细解析

当您在运行某个程序或游戏时遇到提示“找不到msvcp100.dll&#xff0c;无法继续执行代码”&#xff0c;这通常意味着系统中缺失了一个重要的动态链接库文件&#xff0c;从而导致应用程序无法正常启动。为了解决这个问题&#xff0c;本文将介绍5种常见的解决方法&#xff0c;帮助…

卓豪Zoho CRM怎么收费?多少钱一年?

卓豪Zoho CRM作为一款功能强大且高度可定制的企业级客户关系管理系统&#xff0c;其收费标准因版本不同而有所差异&#xff0c;旨在满足不同规模及需求的企业。Zoho CRM提供多种套餐选择&#xff0c;包括但不限于免费版、标准版、专业版、企业版以及旗舰版。每种版本都包含了核…

华为OD机试 - 掌握的单词个数 - 回溯(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述 有一个字符…

步入式恒温恒湿试验箱厂家哪家好?DHT(多禾试验)是您不二之选

步入式恒温恒湿试验箱厂家是一种广泛应用于科研、生产和质量控制领域的设备&#xff0c;所以选择一个合适的步入式恒温恒湿试验箱厂家&#xff0c;是确保试验数据准确性和可靠性的核心因素。因此在选择步入式恒温恒湿试验箱厂家时&#xff0c;需要考虑多方面因素&#xff0c;如…

Golang SDK安装

windows环境安装 1.链接: 下载地址 2.安装SDK 检查环境变量&#xff1a; 3.开启go modules,命令行执行一下命令&#xff1a; go env -w GO111MODULEon4.设置国内代理&#xff0c;命令行执行一下命令&#xff1a; go env -w GOPROXYhttps://proxy.golang.com.cn,https:/…

算法专题:位运算

目录 常见位运算总结 位运算相关算法题 1. 只出现一次的数字 2. 只出现一次的数字&#xff08;|||&#xff09; 3. 两整数之和 4. 只出现一次的数字&#xff08;||&#xff09; 常见位运算总结 在开始刷位运算这个类型的题目前&#xff0c;我想先带着大家学习一下一些常见…

Abp框架,EF 生成迁移文件时,自动添加表和字段注释内容

在使用 abp 框架&#xff0c;或者ef 的时候都会遇到一个问题&#xff0c;就是建实体后要将实体描述生成到数据库中&#xff0c;就需要手动去添加 [Comment("注释内容")] 注解&#xff0c;这样相当于手动写两次注释&#xff08;即使你是 Ctrl C&#xff09;&#x…

现在做电商迟吗?那是你不知道今年黑马,视频号小店重磅来袭

大家好&#xff0c;我是电商笨笨熊 24年想做电商&#xff0c;还能不能做&#xff1f; 当然可以。 电商是一个长期的市场&#xff0c;只要用户有需求&#xff0c;那么电商就会一直存在&#xff1b; 尤其是近几年来无货源模式爆火&#xff0c;对于我们商家来说这种无需自备货…

软件安全测试可以检测软件哪些安全问题?

软件安全测试是一种旨在发现和评估软件应用程序中的安全漏洞和隐患的测试方法。通过安全测试&#xff0c;可以发现并修复潜在的安全问题&#xff0c;从而提高软件应用程序的可靠性和安全性。下面将介绍软件安全测试可以检测到的几种主要安全问题。 身份验证漏洞&#xff1a;身份…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求&#xff1a; 之前的代码吗存在几个问题&#xff0c;最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战&#xff08;四格长条纸&#xff09;&#xff08;4*4&#xff09;和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

黑盒测试中的边界值分析

黑盒测试是一种基于需求和规格的测试方法&#xff0c;它主要关注软件系统输出的正确性和完整性&#xff0c;而不考虑内部代码的实现方式。在黑盒测试中&#xff0c;边界值分析是一种重要的测试技术&#xff0c;它可以帮助测试人员有效地发现输入和输出的问题。本文将从什么是边…

nacos在没有指定数据源的情况下默认使用什么数据库?

在没有特别指定数据源的情况下&#xff0c;Nacos 默认使用内嵌的数据库 Derby 来存储其数据。Derby 是一个轻量级的、基于 Java 的数据库管理系统&#xff0c;适合于开发和测试环境&#xff0c;因为它简单易部署且无需额外的数据库服务器。然而&#xff0c;对于生产环境&#x…

JSP ssm 房屋中介管理myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 房屋中介管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

【C语言/数据结构】栈:从概念到两种存储结构的实现

目录 一、栈的概念 二、栈的两种实现方式 1.顺序表实现栈 2.链表实现栈 三、栈的顺序存储结构及其实现 1.栈的声明 2.栈的初始化 3.栈的销毁 4.栈的压栈 5.栈的弹栈 6.栈的判空 7.返回栈顶元素 8.返回栈的长度 四、栈的链式存储结构及其实现 1.栈的声明 2.栈的…

GBase 8s 数据库集群切换及恢复

GBase 8s 数据库切换分为自动切换、由CM控制的按FOC规则的切换、手工切换。 自动切换 全自动切换用于HAC集群中&#xff0c;由于集群只有两个节点&#xff0c;数据库相互之前进行状态检查&#xff0c;发现异常时&#xff0c;能按DRAUTO的配置方式进行自动切换。 在HAC集群中&…