首页 > 其他分享 >[Codeforces] CF1740D Knowledge Cards

[Codeforces] CF1740D Knowledge Cards

时间:2023-12-15 19:11:06浏览次数:29  
标签:cnt 格子 int Codeforces times maxn CF1740D Cards now

CF1740D Knowledge Cards

题意

有一个 \(n \times m\) 的棋盘。现在\((1,1)\)中有一个栈,你可以按照一定的顺序进行出栈操作,每次都可以移动一个卡片到一个相邻的空白位置,但是卡片不能重合。问,能否通过若干次操作,将\((1,1)\)中全部的卡片移动到\((n,m)\)的栈中并使得这个栈按照从栈顶到栈底单调递增。

注意,操作过程中不能向\((1,1)\)中移动或者从\((n,m)\)中移走

思路

先看一个游戏:

img

现在有一个\(n\times m\)的格子,每次你都可以移动蓝色或者灰色的格子到相邻的空白格子里,目标是将蓝色的格子移动到\((n,m)\)

很明显,一定存在一种操作满足上述条件

而类比到题目里,\((1,1)\)和\((n,m)\)就相当于两个栈,蓝色的就相当于现在希望入栈的值,而灰色的就是已经出了\((1,1)\)但是还没发进入\((n,m)\)

可以发现,一个\(n\times m\)的格子中最多存在\(n\times m-4\)个灰色格子,也就是说等待的数最多只能有\(n\times m-4\)个

其实,相当于就是每一个数之前,有多少个比他小的数,就是他出\((1,1)\)之后方格中灰色格子的个数,而这个个数一旦超出\(n\times m-4\),那么就无法完成操作

据此,判断即可,而求每个数前面的有多少个比他小的数可以用桶\(O(n)\)实现。

代码

#include<bits/stdc++.h>
using namespace std;
const int Maxn=1e5+10;
int n,m,k;
int a[Maxn];
int maxn,cnt,now;
int f[Maxn];
void run()
{
    cin>>n>>m>>k;maxn=-1e9,now=k;
    memset(f,0,4*(k+3));
    for(int i=1;i<=k;i++)
    {
        cin>>a[i];
        f[a[i]]=1;
        if(a[i]==now)
        {
            maxn=max(cnt,maxn);
            while(f[--now]) cnt--;
        }
        else cnt++;
    }
    if(maxn>n*m-4) cout<<"TIDAK";
    else cout<<"YA";
    cout<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--) run();
}

标签:cnt,格子,int,Codeforces,times,maxn,CF1740D,Cards,now
From: https://www.cnblogs.com/lyk2010/p/17904040.html

相关文章

  • [Codeforces] CF1722G Even-Odd XOR
    CF1722GEven-OddXOR题意给定一个正整数\(n\),请你找出一个长度为\(n\)数组\(a\),满足数组是由互不相同的非负且小于\(2^{31}\)的整数组成,并且该数组中奇数项上元素的异或值与偶数项上元素的异或值要相等。思路根据异或的交换律,可以发现:奇偶位异或值相等,那么全局异或值位......
  • CodeForces 838D Airplane Arrangements
    洛谷传送门CF传送门考虑加入第\(n+1\)个位置,这样座位构成了一个环。每个位置被覆盖的概率相等,为\(\frac{m}{n+1}\),然后算出概率再乘方案数就行了。code//Problem:D.AirplaneArrangements//Contest:Codeforces-IndiaHacks2ndElimination2017(unofficial,......
  • Codeforces Round 787 (Div. 3)D. Vertical Paths
    题目链接题意:给定一棵树,将这棵树划分成几天互不相交的链,要求最小化链的数量思路:每个叶子节点一定在一条链中,所以链的数量就是叶子节点的数量,从叶子节点往上跳直到根节点,边跳边标记,路径上所有点都属于这条链。坑:数据大时,不要轻易使用memset不然会t到起飞vector不要开太多就比......
  • Codeforces Round 814 (Div. 2)
    基本情况又是过了ABC。A、B思路更多的是从数据上分析出来的,过的很顺。C经典拿评测机来调试,甚至还RE了一次,最后终于过了。C.FightingTournamentProblem-C-Codeforces第一次改错这题我的思路是找到规律后,优先队列加二分查找。但是一直WA第二个点,这是我一开始的代码:......
  • Codeforces Round 812 (Div. 2)
    基本情况第一次赛时做出div2的ABC。然而B题是秒的最快的?A题卡了一段时间经典+4,C题代码实现卡了一段时间。A.TravelingSalesmanProblemProblem-A-Codeforces卡题分析主要原因在少了特判,没有自己多构造几个特殊情况数据。这是一开始的代码voidsolve(){ intn,......
  • Codeforces Round 810 (Div. 2)
    基本情况A题秒了,B、C题死活看不懂题目。B.PartyProblem-B-Codeforces错误分析为啥看不懂题目,一方面是英语水平确实不够,另一方面就是图的意识不行,如果能看出来这题隐含的建图思想,就很有助于理解题目。正确思路题意有\(T\)组数据,每组数据给你一组\(n,m\)表示共......
  • [Codeforces] CF1737C Ela and Crickets
    CF1737CElaandCrickets题意给定一个\(n\timesn\)的棋盘,棋盘上有且仅有三颗排成\(\text{L}\)形的棋子。对于\(\text{L}\)形的定义,有且仅有以下四种情况:棋子的移动规则和跳棋相同。它可以水平、垂直或斜向移动。当且仅当一个棋子的某个方向紧随另一个棋子时,它能跳......
  • Codeforces Round 809 (Div. 2)
    基本情况A题秒了。B题卡了很久,最后过了。C来不及了。B.MakingTowersProblem-B-Codeforces卡题分析最初想法其实已经推出来下标差为奇数才能构成高塔了。但是思维固化,认为这个问题就必须用LIS那类做法做,然后硬打了一个\(\operatornameO(n^2)\)的DP,然后就TLE......
  • Codeforces Round 808 (Div. 2)
    基本情况最难受的一集。A搞了一个半小时愣是没开出来。A.DifferenceOperationsProblem-A-Codeforces错误分析我分了好多类讨论,换言之没找到更本质的东西。我想的是如果前面有一个数能处理到\(1\)那后面就都能过。止步于此,而没有往更本质,更普适的地方想。然后又......
  • Codeforces Round 807 (Div. 2)
    基本情况AB题秒了。C题搞了半天,搞了一个假的解法,最后还是爆空间了。D题没想下去。C.MarkandHisUnfinishedEssayProblem-C-Codeforces错误分析写出来自己的错解之后没有进一步思考,而是觉得没希望直接做D去了,实则D也没可能半小时写完。我的错解就是预处理好每个......