https://ac.nowcoder.com/acm/contest/11257/F
贪心
using namespace std;
typedef long long ll;
ll n, m, t[100005];
int main(){
scanf("%lld%lld", &n, &m);
ll sum = 0, mx = 0, tmax = 0;
for (int i = 1; i <= n; ++i) {
scanf("%lld", &t[i]);
mx = max(mx, t[i]);
sum += t[i];
}
// 取煎最长时间用的牛排与平均时间(总的时间加起来在m个锅中的平均时间)的最大值
ll avg = sum % m == 0? sum / m: sum / m + 1;
tmax = max(mx, avg);
// 对于任意一个牛排t[i] <= tmax
// 所以如果要用两个锅时,当前锅后部分与下一个前面部分不会有交集
ll nowpan = 1, nowtime = 0;
for (int i = 1; i <= n; ++i) {
// 当前锅用的时间达到均值时,开始换锅
if(nowtime == tmax){
nowtime = 0;
nowpan++;
}
if(nowtime + t[i] <= tmax){
printf("1 %lld %lld %lld\n", nowpan, nowtime, nowtime + t[i]);
nowtime += t[i];
}else{
printf("2 ");
// 当前锅放不下的部分,放下一个锅的前面部分
printf("%lld 0 %lld ", nowpan + 1, t[i] - (tmax - nowtime));
printf("%lld %lld %lld\n", nowpan, nowtime, tmax);
nowpan++; nowtime = t[i] - (tmax - nowtime);
}
}
return 0;
}