首页 > 其他分享 >[Codeforces] CF1737C Ela and Crickets

[Codeforces] CF1737C Ela and Crickets

时间:2023-12-13 12:44:20浏览次数:31  
标签:平移 le ++ Ela Codeforces second 棋子 Crickets first

CF1737C Ela and Crickets

题意

给定一个 \(n\times n\) 的棋盘,棋盘上有且仅有三颗排成 \(\text{L}\) 形的棋子。

对于 \(\text{L}\) 形的定义,有且仅有以下四种情况:




棋子的移动规则和跳棋相同。它可以水平、垂直或斜向移动。当且仅当一个棋子的某个方向紧随另一个棋子时,它能跳到另一个棋子之后的一个方格上。棋子不能跳出棋盘。

现在有 \(T\) 组询问,每组给出棋盘大小 \(n(n\le 10^5)\),三颗棋子各自的位置 \(r_1,c_1,r_2,c_2,r_3,c_3(1\le r_1,c_1,r_2,c_2,r_3,c_3 \le n)\),以及目标点 \(x,y(1 \le x,y \le n)\),询问是否能使其中的一颗棋子跳到目标点。输出 YESNO

思路

不要想太复杂,这题其实就是个分支语句

现在有这种情况:

img

咱们进行若干次操作如图:(绿色是被操作的,黄色是操作后的)

img

可以发现,上图中我们通过若干次操作将原图形向左进行了平移。

那么,也可以用同样的方法向另外四个方向进行平移。

所以,我们可以得出结论:通过若干次操作,我们就可以将原图形进行平移,得到新的图形。将L形看作一个 \(2\times 2\) 的正方形,那么无法走到的就是L形的缺口,所以我们只需要判断一下目标点是不是平移若干次后L形的缺口即可。

具体的,如图,我们通过操作一定平移不到蓝色方块处:

img

更具体的,如果该 \(2 \times 2\) 的方块中空白的点坐标为 \((r,c)\) ,那么他就一定无法移动到 \((x,y)\) 满足 \(x \equiv r \bmod 2, y \equiv c \bmod 2\)

需要注意,如果L形是在四个角上,那么这种情况较为特殊,需要特判一下

代码

如果中间那段map查找换成直接判断的话,那这题就变成一道纯分支语句的1500了()

#include<bits/stdc++.h>
using namespace std;
int r,c,r1,c1;
    //r表示L形的竖边所在的列,c表示L形横边所在的行
    //(r1,c1)表示L形缺口的坐标
int x,y,n;
void run()
{
    map<int,int>fr,fc;
    cin>>n;
    for(int i=1;i<=3;i++)
    {
        cin>>r>>c;
        fr[r]++;
        fc[c]++;
    }
    cin>>x>>y;
    for(auto it=fr.begin();it!=fr.end();it++) 
    {
        if(it->second==2) r=it->first;
        else if(it->second==1) r1=it->first;
    }
    for(auto it=fc.begin();it!=fc.end();it++)
    {
        if(it->second==2) c=it->first;
        else if(it->second==1) c1=it->first;
    }
    //L形缺口的坐标就是三组(r,c)中只出现一次的,而横竖遍则分别出现了两次,据此map查找即可
    //这里为了方便用了map,你手动分支语句也可以
    if(r==1 && c==1) 
    {
        if(x==1 || y==1) cout<<"Yes";
        else cout<<"No";
    }else if(r==1 && c==n) 
    {
        if(x==1 || y==n) cout<<"Yes";
        else cout<<"No";
    }else if(r==n && c==1) 
    {
        if(x==n || y==1) cout<<"Yes";
        else cout<<"No";
    }else if(r==n && c==n) 
    {
        if(x==n || y==n) cout<<"Yes";
        else cout<<"No";
    }else
    {
        if(x%2==r1%2 && y%2==c1%2) cout<<"No";
        else cout<<"Yes";
    }
    cout<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--) run();
}

标签:平移,le,++,Ela,Codeforces,second,棋子,Crickets,first
From: https://www.cnblogs.com/lyk2010/p/17898815.html

相关文章

  • Codeforces Round 809 (Div. 2)
    基本情况A题秒了。B题卡了很久,最后过了。C来不及了。B.MakingTowersProblem-B-Codeforces卡题分析最初想法其实已经推出来下标差为奇数才能构成高塔了。但是思维固化,认为这个问题就必须用LIS那类做法做,然后硬打了一个\(\operatornameO(n^2)\)的DP,然后就TLE......
  • elasticsearch安装-集群
    下载安装包国内镜像,速度非常快https://mirrors.huaweicloud.com/elasticsearch/https://mirrors.huaweicloud.com/kibana/wgethttps://mirrors.huaweicloud.com/elasticsearch/7.9.3/elasticsearch-7.9.3-linux-x86_64.tar.gz安装准备3台机器:1、安装目录:/usr/local/elas......
  • Codeforces Round 808 (Div. 2)
    基本情况最难受的一集。A搞了一个半小时愣是没开出来。A.DifferenceOperationsProblem-A-Codeforces错误分析我分了好多类讨论,换言之没找到更本质的东西。我想的是如果前面有一个数能处理到\(1\)那后面就都能过。止步于此,而没有往更本质,更普适的地方想。然后又......
  • 从根上理解elasticsearch(lucene)查询原理(2)-lucene常见查询类型原理分析
    大家好,我是蓝胖子,在上一节我提到要想彻底搞懂elasticsearch慢查询的原因,必须搞懂lucene的查询原理,所以在上一节我分析了lucene查询的整体流程,除此以外,还必须要搞懂各种查询类型内部是如何工作,比如比较复杂的查询是将一个大查询分解成了小查询,然后通过对小查询的结果进行合并得到......
  • Codeforces Round 807 (Div. 2)
    基本情况AB题秒了。C题搞了半天,搞了一个假的解法,最后还是爆空间了。D题没想下去。C.MarkandHisUnfinishedEssayProblem-C-Codeforces错误分析写出来自己的错解之后没有进一步思考,而是觉得没希望直接做D去了,实则D也没可能半小时写完。我的错解就是预处理好每个......
  • ElasticSearch之Node query cache settings
    对于filter查询,ElasticSearch提供了缓存查询结果的特性,当缓存中存在满足查询条件要求的数据时,直接从缓存中提取查询结果。对于ElasticSearch节点,该节点上的所有shard共享同一个缓存区域。ElasticSearch基于LRU算法来管理缓存中的数据,当空间不足以承载最新的查询操作的结果时,使用......
  • relay interface (formerly relayfs) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/filesystems/relay.html#relay-interface-formerly-relayfsRelayInterface(formerlyrelayfs)介绍Relay接口提供了一种方式,让内核应用能够通过用户定义的“中继通道”高效地将大量数据从内核传输到用户空间。一个“中继通道”是一种......
  • Codeforces 198 B Jumping on Walls
    题面翻译题目描述瓦西亚在和忍者玩电脑游戏。在这个关卡,瓦西亚需要操控忍者走出一个很深的峡谷。峡谷由两面垂直于地面且互相平行的墙组成,它们的高度为\(n\)米。我们将这些墙分成许多\(1\)米长的区域,并从下到上用\(1\)到\(n\)的正整数对它们进行编号。有些地方是安全的,忍者可以......
  • Codeforces Round 914 (Div. 2)
    基本情况A题+2,幸好后面突然悟了。B题体现了读题以及一词多义的重要性。C题不会。看了一下1700分的题目,暂时先放了。A.TheThirdThreeNumberProblemProblem-A-Codeforces推出了规律,\(n\)为偶数的时候,无脑\(a=n\oplus1,b=n\oplus1,c=1\)就行。然而奇数......
  • unity Transform 的 Rotate(xAngle: float, yAngle: float, zAngle: float, relativeT
    publicclassdemoword2:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//transform.Rotate(60,70,80,Space.World);//eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴//......