P9735题解

· · 题解

题意

题目传送门

这是一道模拟题。

会发生两种事件:

我们定义一个数组 aa_i 表示第 i 个车站所花费的时间。

若发生 Patrik 事件,就将所花费的时间赋值给 a_i

若发生 Josip 事件,就将 a_i 赋值为 a_y+t

最后,将数组中两个相邻车站之间距离最小的找出,记录下表,并输出即可。

代码

#include<bits/stdc++.h>
using namespace std;
int n,t,y,a[1010];
int minn=2147483647,ans;
string s;
int main(){
    cin>>n;
    for(int i=2;i<=n;i++){//记得从2开始
        cin>>s;
        if(s=="Patrik"){
            cin>>t;
            a[i]=t;
        }
        else{
            cin>>y>>t;
            a[i]=a[y]+t;
        }
    }
    for(int i=2;i<=n;i++){//取最小值
        if(a[i]-a[i-1]<minn){
            minn=a[i]-a[i-1];
            ans=i;
        }
    }
    cout<<minn<<" "<<ans-1<<" "<<ans;//输出
    return 0;
}