码迷,mamicode.com
首页 > 其他好文 > 详细

CodeRorce- Prizes, Prizes, more Prizes

时间:2015-03-30 01:38:01      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:acm   算法   

这个题目比较简单,但是有些细节。
比如:50个输入,每个都是10^9,但是奖品最高价格为5.
那么奖品5的数量将会超过int的表示范围,所以cnt要用unsigned long long类型。

#include <stdio.h>
#include <string.h>
typedef unsigned long long LL;
int n;
int points[60];
int cost[5];
LL cnt[5];
LL sum;
int main(){
    freopen("input.txt","r",stdin);

    while(scanf("%d",&n)!=EOF){
        memset(points,0,sizeof(points));
        memset(cost,0,sizeof(cost));
        memset(cnt,0,sizeof(cnt));
        sum=0;
        for (int i = 0; i < n; ++i){
            scanf("%d",&points[i]);
        }
        for (int i = 0; i < 5; ++i)
            scanf("%d",&cost[i]);

        for (int i = 0; i < n; ++i)
        {
            sum+=points[i];
            while(sum>=cost[0]){
                for (int j = 4; j >= 0; --j)
                {
                    int num = sum/cost[j];
                    if (num>=1)
                    {
                        cnt[j]+=num;
                        sum-=cost[j]*num;
                        break;
                    }
                }
            }
        }
        printf("%llu %llu %llu %llu %llu\n",cnt[0],cnt[1],cnt[2],cnt[3],cnt[4]);
        printf("%llu\n",sum);
    }
}

CodeRorce- Prizes, Prizes, more Prizes

标签:acm   算法   

原文地址:http://blog.csdn.net/li8630/article/details/44737179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!