Codeforces 1238C. Standard Free2play


傳送門

題目別看錯了,好像挺多人都讀錯了...

然后顯然可以貪心,只有在需要用 $\text{magic crystals}$ 的時候才用

那么直接模擬即可

如果初始相鄰兩個突出的平台高度不連續那么我們顯然可以直接從上面一步步操作到達下面的平台的上面一個位置

此時考慮如果我們直接操作,那么下面那個平台(設為 $x$)就會縮起來,然后就會掉到更下面的平台(設為 $y$)

如果當前和更下面的平台 $y$ 高度超過 $2$ 了,那么為了不摔死只能用一次 $\text{magic crystals}$

並且用在 $x$ 位置和用在 $x$ 下面一個位置(不是平台)都是一樣的,那么直接用在 $x$ 位置就好了

如果和 $y$ 高度不超過 $2$ ,那么我們顯然直接操作然后落到 $y$ 即可

這樣一定是最優的,直接按着思路模擬,注意細節

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=2e5+7;
int Q,n,m,a[N];
int main()
{
    Q=read();
    while(Q--)
    {
        n=read(),m=read();
        for(int i=1;i<=m;i++) a[i]=read();
        int ans=0;
        for(int i=2;i<=m;i++)
        {
            if(n<=a[i]) continue;
            if(n!=a[i]+1) n=a[i]+1;
            if(i<m)
            {
                if(a[i+1]==a[i]-1) n=a[i+1];
                else ans++,n=a[i];
                continue;
            }
            if(n>2) ans++;
            break;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM