P6389 题解

· · 题解

题目

题目传送门

思路

由于题目已经说过:

不能有两个以上的乐师在同一个时刻休息

所以前两位乐师直接从 0 时刻开始休息

在休息的同时,我们也要用计数器累加乐师需要休息的时刻

后面的乐师要看前面的乐师哪一个休息的快,也就是计数器累加的时刻哪一个少。

注意,题目同时说到:

尽管方案可能不唯一,但数据保证方案一定存在,本题使用SPJ。

说明题目不止 1 种解,这也证实了前两位乐师直接从 0 时刻开始休息是没问题的

例如样例一的答案位 0 2 4,但答案 0 0 4 也正确。

由于我们每次都是判断计数器累加的时刻少的一个,所以得出来的答案必定在 t 之内,因此我们无需使用 t 这个变量。

代码

珍爱账号,远离抄袭。

#include <algorithm> 
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define ll long long 
using namespace std;
ll t,n,a; 
ll cnt1,cnt2; 
void getprime(){ 
    cin>>t>>n; 
    for(int i=0;i<n;i++){ 
        cin>>a;
        cout<<min(cnt1,cnt2)<<" "; 
        if(cnt1<cnt2){ 
            cnt1+=a; 
        } else{ 
            cnt2+=a; 
        }
    }
}
int main(){ 
    getprime(); 
    return 0; 
}