题解:P12110 [NWRRC2024] False Alarm

· · 题解

洛谷 P12110 题解

解题思路

这题我觉得我们可以用如下的思路解答:

第一步

首先先定义两个数组,分别用来存储小时和分钟。\ 再根据 n 的值确定循环次数,在输入小时与分钟的过程中进行单位转换,什么意思呢?下面是公式:m_i \gets h_i \times 60 + m_i。\ 其中 m_i 指的是分钟 h_i 指的是小时。\ 把已有小时转化为分钟,再与现有分钟数相加。\ 因为不乏有一些数据会牵扯到进位,所以对于数据而言显然全部转化成分钟才是明智之举。

第二步

这里我用的是筛选的方法做的。大意。先筛选出结果为 0 的答案,再筛选出 1 的,以此类推,3 不用考虑,因为 10 \ge n \ge 1,但凡能输入一个数,都是无法输出 3 的。\ 不懂的仔细想想。

编程思路

  1. 现在只剩下结果 2 答案了,还需要考虑吗?直接 cout<<2; 程序结束。

    Code

    声明一下,这篇不是重复题解!!!

#include<bits/stdc++.h>
using namespace std;
int h[25],m[25];//防止数组越界 
int main(){
    char k;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>h[i]>>k>>m[i];
        m[i]+=h[i]*60;//高级单位换算成低级单位乘进率 
    }
    //列举 
    for(int i=1;i<=n;i++){
        if(m[i+2]-m[i]<=10&&m[i+2]-m[i]>0){
            cout<<0;
            return 0;
        }
    }
    for(int i=1;i<=n;i++){
        if(m[i+1]-m[i]<=10&&m[i+1]-m[i]>0){
            cout<<1;
            return 0;
        }
    }
    cout<<2;
    return 0;
}