首页 > 其他分享 >Atcoder Grand Contest 059 E - Grid 3-coloring(转化+思维)

Atcoder Grand Contest 059 E - Grid 3-coloring(转化+思维)

时间:2023-05-01 23:34:17浏览次数:35  
标签:Atcoder coloring return Contest int void 元素 奇偶性 相邻

首先先是一步很猛的操作——将三染色视作构造一个矩阵使得相邻元素相差 \(1\) 且每个元素 \(\bmod 3\) 的值就等于其颜色。证明是显然的,我们按从上到下从左到右的顺序填数,可以归纳证明,对于一个相邻格子颜色互不相同的矩阵的填数方案,处于斜对角的两个格子上写的数要么差 \(2\),要么相等,这样待填的这个格子必然存在合法的待选值。

于是问题转化为是否存在合法的填数方案。我们先给边界上的元素确定值,如果边界上都没法做到相邻元素相差 \(1\) 就直接似了。判完这个条件之后思考还有什么必要条件,显然边界上任意两个元素之间的差值不能超过它们的曼哈顿距离,否则的话对于任意一条它们之间的路径,必然存在两个元素相差 \(\ge 2\)。而这一部分的 check 其实只用考虑边界上相对的位置,即 \(a_{1,i}\) 与 \(a_{n,i}\),以及 \(a_{i,1}\) 与 \(a_{i,n}\)。

这样是否充分了呢?答案是肯定的。考虑构造,\(a_{i,j}=\max\{i-1+a_{1,j},n-i+a_{n,j},j-1+a_{i,1},m-j+a_{i,m}\}\)。容易验证相邻元素相差不超过 \(1\),并且根据黑白染色,中括号中四项的奇偶性都是相同的,也就是 \(a_{i,j}\) 的奇偶性是随 \(i+j\) 的奇偶性同步变化的。因此不会出现相邻元素相同的情况,符合条件。

评价:agc 全是脑洞题,一步想出来就会做,否则就不会/tuu

#include<bits/stdc++.h>
using namespace std;
int n,len,sum[1000005];char s[1000005];
void solve(){
	scanf("%d%s",&n,s+1);len=strlen(s+1);s[++len]=s[1];sum[1]=(s[1]-'0')%3;
	for(int i=2;i<=len;i++)for(int j:{-1,1})if(((sum[i-1]+j)%3+3)%3==(s[i]-'0')%3)sum[i]=sum[i-1]+j;
	if(sum[1]!=sum[len])return puts("NO"),void();
	for(int i=2;i<n;i++)if(abs(sum[i]-sum[3*n-1-i])>=n)return puts("NO"),void();
	for(int i=2;i<n;i++)if(abs(sum[n-1+i]-sum[4*n-2-i])>=n)return puts("NO"),void();
	puts("YES");
}
int main(){int qu;scanf("%d",&qu);while(qu--)solve();return 0;}

标签:Atcoder,coloring,return,Contest,int,void,元素,奇偶性,相邻
From: https://www.cnblogs.com/tzcwk/p/AGC059E.html

相关文章

  • AtCoder Regular Contest 122 D XOR Game
    洛谷传送门AtCoder传送门从高到低按位考虑。设当前位有\(k\)个\(1\)。如果\(k\bmod2=0\),这意味着Alice如果选了一个数,Bob可以选相同的数。发现可以分成\((0,0),(1,1)\)两组,递归下去即可。如果\(k\bmod2=1\),意味着答案这一位一定是\(1\)(因为无论如何都不......
  • AtCoder Regular Contest 119 E Pancakes
    洛谷传送门AtCoder传送门感觉挺典的,为啥有2500啊(观察发现,反转序列对\(\sum\limits_{i=1}^{n-1}|a'_i-a'_{i+1}|\)影响不大。具体而言,设反转了\(a_l\sima_r\),记\(s=\sum\limits_{i=1}^{n-1}|a_i-a_{i+1}|\),那么\(s'=s-|a_{l-1}-a_l|-|a_r-a_{r+1}|......
  • 2023 Hubei Provincial Collegiate Programming Contest
    链接:https://codeforces.com/gym/104337C画个图看看,复杂度\(O(1)\)。C++Code#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,m;cin>>......
  • AtCoder Regular Contest 117 D Miracle Tree
    洛谷传送门AtCoder传送门第一步就没想到可以考虑化简限制。设所有点按\(E_i\)从小到大排序后顺序是\(p_1,p_2,...,p_n\)。发现只需满足\(E_{p_{i+1}}-E_{p_i}\ge\operatorname{dis}(p_i,p_{i+1})\)。证明是对于任意\(i<j<k\),若\(p_i,p_j\)和\(p_j,p_k\)均满......
  • AtCoder Beginner Contest 231
    A-WaterPressure#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; printf("%.6lf\n",n/100.0);return0;}B-Election#include<bits/stdc++.h>usingnamespacestd;intmain(){ ios:......
  • Educational DP Contest
    EducationalDPContestATcoder_link夯实基础的好东西I记录一下此时第i个有多少概率小于等于j的就可以了。#include<bits/stdc++.h>usingnamespacestd;constintN=3005;#definedbdoubledbdp[N][N];intn;dbp[N];intmain(){ios::sync_with_stdio(fal......
  • AtCoder比赛记录(一)
    这里记录的是这个账号的比赛情况。ARC1572023-2-25Solved:4/62189->2216C(Medium,1802)给定一个XY矩阵,一条左上角到右下角的路径的分值定义为路径上连续两个Y的组数。求所有可能路径的分值的平方和。Solution:经典DP。递推两个量,一个是到(i,j)所有路径的分值和\(f_{i,j}\),......
  • AtCoder比赛记录(二)
    这里记录的是这个账号的比赛情况。ABC3002023-4-29Solved:7/80->1200F(Medium-,1846)给定由o和x组成的字符串\(S\)。将\(S\)复制\(m\)遍,然后将其中\(k\)个x改成o,求改完之后连续的o最多可能有多少个。Solution:贪心。设最多能改完\(t\)个完整的\(S\),考虑三类情况:最长连续......
  • AtCoder Regular Contest 116 F Deque Game
    洛谷传送门AtCoder传送门很强的博弈+性质题。下文令A为Takahashi,B为Aoki。发现单独考虑一个序列\(a_1,a_2,...,a_n\):若\(n\bmod2=0\):若A为先手,答案为\(\max(a_{\frac{n}{2}},a_{\frac{n}{2}+1})\);若B为先手,答案为\(\min(a_{\frac{n}{2}},a_{\frac......
  • AtCoder Regular Contest 123 E Training
    洛谷传送门AtCoder传送门不妨假设\(B_X\leB_Y\)。设\(f(x)=A_X+\frac{x}{B_X},g(x)=A_Y+\frac{x}{B_Y},F(x)=\left\lfloor{f(x)}\right\rfloor,G(x)=\left\lfloor{g(x)}\right\rfloor\),题目即求\(\sum\limits_{x=1}^n[F(x)=G(x)]\)。我一开始尝试化简......