2010-1110
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
== Contest 8 by ACFun - Yuyuko and Youmu ==
'''题目大意'''[[BR]]
某人每天需要吃一定量的食物,明天准备的食物量有上限,要求每天都能满足食物量且食物尽量新鲜,求此条件下每天准备食物的量。
'''解法'''[[BR]]
倒过来思考,若最后一天需要吃一定量的食物,而能准备的食物量小于需要的量,则这个差值需要用较早日子的准备量来补足,即累加到前一天;反之若能准备的食物量大于等于需要的量,则一定只需要需要的量。倒推回第一天之前,如果还有需要的量,则输出"Myon",否则输出方案。
'''代码'''
{{{
#!cpp
#include <cstdio>
int req[1023], can[1023];
int main(){
int n, need;
while(scanf("%d", &n) != EOF){
for(int i = 0;i < n;i++){
scanf("%d", &req[i]);
}
for(int i = 0;i < n;i++){
scanf("%d", &can[i]);
}
need = 0;
for(int i = n - 1;i >= 0;i--){
if(req[i] + need <= can[i]){
req[i] += need;
need = 0;
}else{
need = req[i] + need - can[i];
req[i] = can[i];
}
}
if(need){
puts("Myon");
}else{
for(int i = 0;i < n;i++){
printf("%d%c", req[i], (i + 1 < n) ? ' ' : '\n');
}
}
}
return 0;
}
}}}
Contest 8 by ACFun - Yuyuko and Youmu
题目大意
某人每天需要吃一定量的食物,明天准备的食物量有上限,要求每天都能满足食物量且食物尽量新鲜,求此条件下每天准备食物的量。
解法
倒过来思考,若最后一天需要吃一定量的食物,而能准备的食物量小于需要的量,则这个差值需要用较早日子的准备量来补足,即累加到前一天;反之若能准备的食物量大于等于需要的量,则一定只需要需要的量。倒推回第一天之前,如果还有需要的量,则输出"Myon",否则输出方案。
代码
#include <cstdio>
int req[1023], can[1023];
int main(){
int n, need;
while(scanf("%d", &n) != EOF){
for(int i = 0;i < n;i++){
scanf("%d", &req[i]);
}
for(int i = 0;i < n;i++){
scanf("%d", &can[i]);
}
need = 0;
for(int i = n - 1;i >= 0;i--){
if(req[i] + need <= can[i]){
req[i] += need;
need = 0;
}else{
need = req[i] + need - can[i];
req[i] = can[i];
}
}
if(need){
puts("Myon");
}else{
for(int i = 0;i < n;i++){
printf("%d%c", req[i], (i + 1 < n) ? ' ' : '\n');
}
}
}
return 0;
}