0
点赞
收藏
分享

微信扫一扫

2021牛客暑期多校训练营6 - F(Hamburger Steak)

​​https://ac.nowcoder.com/acm/contest/11257/F​​

​贪心​

#include <iostream>

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;
}


举报

相关推荐

0 条评论