Problem F. 洗衣服

Problem F. 洗衣服

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 89    Accepted Submission(s): 66


Problem Description
小明是一个优秀的程序员,但他讨厌洗衣服,所以每次都用公共洗衣机洗衣服,但他带衣服过去的时候总是发现没有洗衣机空闲,需要等很久。作为一个优秀的程序员,小明黑入了洗衣房的监控,获得了所有人去洗衣服的时刻,但他不知道,这些衣服什么时候都洗完。请你帮助他写一个程序解决这个问题。
为了方便计算,问题简化为:n台洗衣机,m个洗衣服任务,每个从xi开始持续45分钟,求最短结束时间(假设从洗衣机里取衣服放衣服不消耗时间,每台洗衣机同一时间只能执行一个任务)。
 

Input
第一行一个T(1≤T≤20)代表数据组数。
每组数据两行:
第一行两个整数n(1≤n≤100),m(1≤m≤1000)。n代表洗衣机台数,m代表有m个洗衣任务。
第二行,m个整数(单调不下降),每个整数xi(0≤xi≤50,000)代表这个任务第xi分钟加入排队。
 

Output
每组数据输出一个整数代表所有任务的结束时间。
Hint

对于第一个样例,只有一台洗衣机,在第一分钟有一个洗衣任务,那么这个洗衣任务在第(1+45)分钟结束。
对于第二个样例,有两台洗衣机,第一个任务交给1号洗衣机,第二个任务交给2号洗衣机,第二个任务在第(2+45)分钟完成,在第(1+45)分钟1号洗衣机完成洗衣任务并开始第三个任务,第三个任务在第(1+45+45)分钟完成,所以答案为91。
 

Sample Input
 
  
2 1 1 1 2 3 1 2 3
 

Sample Output
 
  
46 91
 

Source
 
  
陈都测试2

贪心,水题

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    int s[10000];
    int ss[100000];
    scanf("%d",&t);
    while(t--){
        int n,m;
        scanf("%d %d",&n,&m);
        memset(ss,0,sizeof(ss));
        int sum=0;
        for(int i=0;i<m;i++){
            scanf("%d",&s[i]);
        }
        sort(s,s+n);
        int flag=0;
        for(int i=0;i<m;i++){
            if(i-n<0)ss[i]=s[i]+45;
            else{
                if(ss[i-n]>s[i])ss[i]=ss[i-n]+45;
                else{
                    ss[i]=s[i]+45;
                }
            }
        }
        printf("%d\n",ss[m-1]);
    }
}



猜你喜欢

转载自blog.csdn.net/qibage/article/details/81054146
今日推荐