题目翻译

统计一个游戏的数据,第$i$次有两个数$p_i$表示游玩次数,$c_i$表示通关次数。现在会统计$n$次(按时间顺序),问这个统计是不是错误的。

题目分析

简单模拟。

  1. 通关次数不可能大于游玩次数;
  2. 游玩次数和通关次数不可能减少(因为是按照时间顺序统计的);
  3. 未通关次数不可能变少(同理是因为时间顺序)。

三条规则,三个if解决。

有个需要注意的点就是,发现错误不能立刻输出NO,要等它输入完所有数据,否则输入数据就会交叉在一起。可以用打标记的方法。

具体怎么判断可以看代码。

实现代码

#include <iostream>
using namespace std;
int t,n;
int lp,lw,np,nw;        //lp 上次游玩,lw 上次通关,np 这次游玩,nw 这次通关
int flag;
#define wa flag=0;        //宏定义,代码中出现wa即代表把标记置为假
int main(){
    cin>>t;
    while(t--){
        cin>>n;
        lp=lw=np=nw=0;  //初始化
        flag=1;         //先假设这个数据没问题
        cin>>lp>>lw;    //因为n>=1,所以可以先输入第一组
        if(lp<lw)wa     //详见分析第1条
        for(int i=1;i<n;++i){
            cin>>np>>nw;
            if(nw>np)wa //分析第1条
            if(np<lp || nw<lw)wa    //分析第2条
            if(lp-lw > np-nw)wa     //分析第三条
            lp=np;
            lw=nw;                  //不要忘记更新!
        }
        if(flag)cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}

发表评论

邮箱地址不会被公开。