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