首页 > 其他分享 >CF1450C2 Errich-Tac-Toe (Hard Version)

CF1450C2 Errich-Tac-Toe (Hard Version)

时间:2023-11-13 14:44:35浏览次数:30  
标签:方案 改为 int Hard numx CF1450C2 Version 棋子 numo

思路

实际上,如果你会简单版本,那么困难版本也没有那么难了。

同样考虑构造一种通解,如下,

红色的格子改为 X,绿色的格子改为 O,就是一种通解,同样的,这样改可能会超过棋子总数的 \(\frac 1 3\)。

同样考虑将棋子按照位置分类,假如该棋子的位置是 \((i,j)\),那么按照 \((i+j)\bmod 3\) 的值分类即可,将值为 \(0\) 的看作第 \(0\) 类,值为 \(1\) 的看作第 \(1\) 类,将值为 \(2\) 的看作第 \(2\) 类。

显然的是,将所有第 \(0\) 类棋子改为 X,所有第 \(1\) 类棋子改为 O 是一种方案,还有将第 \(1\2\) 类棋子改为 X,所有第 \(2\3\) 类棋子改为 O 两种方案,总共三种方案,所需要更改的棋子数是将所有棋子全部改完所需要的次数。

根据抽屉原理,三种方案必定至少有一种方案需要的次数少于总棋子数的 \(\frac 1 3\),所以分别统计需要更改个数,最后随意选择一种合理的方案更改即可。

AC code

#include<bits/stdc++.h>
using namespace std;
int T,n,numx[3],numo[3],sum,xz;
char ch[305][305];
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n),sum=numx[0]=numx[1]=numx[2]=numo[0]=numo[1]=numo[2]=0;
		for(int i=1;i<=n;++i)
		{
			scanf("%s",ch[i]+1);
			for(int j=1;j<=n;++j)
			{
				if(ch[i][j]=='O') ++numo[(i+j)%3],++sum;
				if(ch[i][j]=='X') ++numx[(i+j)%3],++sum;//记录每种方案需要更改的棋子数
			}
		}
		if(numx[0]+numo[1]<=sum/3) xz=0;
		if(numx[1]+numo[2]<=sum/3) xz=1;
		if(numx[2]+numo[0]<=sum/3) xz=2;//判断使用那种方法
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=n;++j)
			{
				if(ch[i][j]=='.') printf(".");
				else
				{
					if((i+j)%3!=xz&&(i+j)%3!=(xz+1)%3) printf("%c",ch[i][j]);
					else
					{
						if((i+j)%3==xz) printf("O");
						else printf("X");
					}//对应更改即可
				}
			}
			puts("");
		}
	}
	return 0;
}

标签:方案,改为,int,Hard,numx,CF1450C2,Version,棋子,numo
From: https://www.cnblogs.com/One-JuRuo/p/17829040.html

相关文章

  • Fight Hard for Ecological Protection and Governance of the Yellow River to Addre
    1.Effectivemeasureaimedataddressingthewatercontamination:Wewill fight hard for ecological protection and governance of the Yellow River. We will fully implement the requirements of determining the city, the land, the people,......
  • Ubuntu连接局域网中Windows主机上的v2r报错:rejected core/proxy/socks: unknown Sock
    参考:https://github.com/2dust/v2rayN/issues/3916  ================================    家里有两台电脑,一个是Windows系统,一个是Ubuntu系统;Windows系统用来平常工作舆论,Ubuntu系统用于远程vscode写写code,因此就有一个需求就使用要Ubuntu系统也能上GitHub。 ......
  • sharding分表应用笔记(二)——按时间分表策略配置
    sharding分表应用笔记(二)——按时间分表策略配置目录sharding分表应用笔记(二)——按时间分表策略配置1背景2配置2.1命名空间配置2.2策略接口实现2.2.1时间精确分片策略2.2.2时间范围分片策略3外部链接1背景应用背景:物理数据源只有一个;对于部分数据量大的表实行按月分表处......
  • Electrical(Hardware) Protocols: FIFO / JTAG / SPI / IIC / IIS / UART / SWD / ICS
    Electrical(Hardware)Protocols:JTAG(JointTestActionGroup),JTAGisactuallyaprotocoloverSPI.5pins/connections(GND,TMS,TCK,TDI,TDO),Outputtype:Maximumvoltage:5.5volts(5voltsafe),3.3voltnormal,oropencollector(pull-upresistorsre......
  • Sharding-JDBC框架
    背景  Sharding-JDBC配置与分离规则(重点)2.在application.yml中配置读写分离规则server: port:8080spring: shardingsphere:   datasource:     names:       master,slave     #主数据源matser     master:       type:com.alibab......
  • sharding分表应用笔记(一)——分表数据源配置
    sharding分表应用笔记(一)——分表数据源配置目录sharding分表应用笔记(一)——分表数据源配置1前言2配置2.1相关依赖2.2命名空间配置2.2.1引入sharding命名空间2.2.2物理数据源配置2.2.3分表数据源配置3外部链接1前言应用背景:物理数据源只有一个;对于部分数据量大的表实行......
  • cf1856E2. PermuTree (hard version)(bitset+二进制优化背包+开不同大小bitset)
    https://codeforces.com/contest/1856/problem/E2结论是显然的,关键是有一些科技在里面bitset+二进制优化具体分析可以参考https://codeforces.com/blog/entry/98663简而言之就是可以通过\(O(\frac{C\sqrtC}{w})\)的复杂度判断是否能够获得某种体积开不同大小bitsettemplate......
  • cf1582F2. Korney Korneevich and XOR (hard version)(暴力优化)
    cf1582F2对于每种数可以维护一个列表v[x],表示到当前位置,最后一个数小于等于x,能够取到的值,对于当前的数ai,我们可以用v[ai]中的值x与ai异或,来更新v[ai+1],v[ai+2]后面的值。然后就是有两个优化,每次我们更新完后,都对v[a[i]]清空,因为只有两个相同数之间的数才对后面可能有贡献,前面的......
  • version `GLIBC_2.34' not found (required by ./rmblastn)
     001、问题如下: 002、解决方法:    003、 参考:01、 ......
  • CF1868B2 Candy Party (Hard Version) 题解
    Problem-1868B2-CodeforcesCandyParty(HardVersion)-洛谷相信大家已经看过SimpleVersion,这题和上题不同之处就在于如果\(b_i=2^x\),他可以被分解成\(2^x\)或\(2^{x+1}-2^x\),我们不妨起初固定一种方案,如果不满足条件后再把一部分换回去。我们强制钦定起......