BIT琪露诺的完美算法教室 4.吃货的烦恼

  • Post author:
  • Post category:其他


题目背景

za果然是半吊子水平,竟然选了一个最肥的Pikachu做小伙伴。经过实战za发现这只Pikachu战斗水平并不高,但是体重很可观。于是za打算将其往卡比兽方向培养。

其实这只极度肥胖的Pikachu也不算很能吃,但不知道为什么连喝水都能胖。这个问题困扰了za很久,终于经过彻夜的冥想,za终于发现其中的奥秘了!(广大吃货朋友的福音)

原来这只Pikachu的消化系统很有问题,吃下的食物会在肚子里不断累积增加体重,且会随着时间的增长成倍增加!

即设Pikachu初始体重为w,那么当第1秒吃了重量为p1的食物后,1s后Pikachu体重变为w+p1;第2秒又吃了重量为p2的食物,则2s后Pikachu的体重为w+p1*2+p2。


za的数学学得很糟糕,不能准确的计算他的Pikachu当前重量。小伙伴们,帮帮忙算一算吧!

输入

第一行:Pikachu的初始体重w

第二行:Pikachu吃东西持续的时间N(1<=N<=30000)

第三行:包含N个整数pi,代表Pikachu每一秒吃的食物的重量。由于Pikachu实在太胖了,za把食物重量控制在一个小范围内。(0<=pi<=4)

注:za作为训练师中的业界良心,保证Pikachu的体重不会超过int范围,不会被撑死。

输出

Pikachu在每一秒后的体重

Example:

Input:

1

4

1 2 3 4

Output:

2 5 11 21

第1s:1 + 1*1;

第2s:1 + 1*2 + 2*1;

第3s:   1 + 1*3 + 2*2 + 3*1;

第4s:1 + 1*4 + 2*3 + 3*2 + 4*1;

作者

za
#include <stdio.h>
#include <stdlib.h>

int wt[30001]={0},p[30001]={0};

void f(int n,int M,int v){

        int m;

        for(n=0;n<M;n++){

            for(m=0;m<=n;m++){

                wt[n]+=p[m]*(n-m+1);

            }

        wt[n]+=v;
    }
}


int main(){

    int w,N,i;

    scanf("%d",&w);

    scanf("%d",&N); 

    for(i=0;i<N;i++){

        scanf("%d",&p[i]);

    }

    f(i,N,w);

    for(i=0;i<N-1;i++){
        printf("%d ",wt[i]);
    }

    printf("%d\n",wt[N-1]);

    return 0;
}


不用函数的话我的渣渣程序最后一个用例会TLE=。=



版权声明:本文为ATiao_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。