标签:ati use ant fir tor follow else 排序 max
InputThe first line of input consists of a single integer T(1≤T≤20)T(1≤T≤20), denoting the number of test cases.
For each test case, the first line contains two integers n(1≤n≤105),k(1≤k≤109)n(1≤n≤105),k(1≤k≤109), denoting the number of fish in the pool and the time needed to catch a fish.
the second line contains nn integers, t1,t2,…,tn(1≤ti≤109)t1,t2,…,tn(1≤ti≤109) ,denoting the least time needed to cook the ii - thth fish.OutputFor each test case, print a single integer in one line, denoting the shortest time to pass the trial.Sample Input
2 3 5 5 5 8 2 4 3 3
Sample Output
23 11
题意:
给你一个n,k,n表示有n条鱼,k表示每条吊每条鱼要k分钟。
然后一行有n个数,表示第i条鱼要用xi的时间去煮。
且当开始钓某条鱼后,直到把这条鱼钓起来,中间不能干别的事。
问煮好所有的鱼用时。
思路:
我们尽量在煮鱼的时间去钓鱼,那么对于每一个xi都会有xi%k(记为ai)的时间空余,是锅里在煮鱼,而人不在钓鱼的空闲时间。
对于每一个xi我们都可以用xi/k去统计钓起来的鱼数(记为s),但可能xi比较小,统计出来的s<n-1,这时候我们就要在多用时间去钓鱼(人在钓鱼,锅不在煮鱼)。
显然如果想要时间短,那么“人在钓鱼,锅不在煮鱼”的时间必然要小。所以我们对ai进行由大到小排序,累加前(n-1)-s个k-ai的值。
然后在加上煮鱼的总时间就是答案。
#include<bits/stdc++.h> using namespace std; #define ll long long #define met(a,b) memset(a,b,sizeof(a)) #define ios1 ios::sync_with_stdio(false) #define ios2 cin.tie(0);cout.tie(0) const int maxn = 999999999; const ll mod = 1e7 + 9; bool cmp(int a,int b) { return a>b; } int main() { int t; cin>>t; while(t--) { int n,k; cin>>n>>k; int x[n+10]; int a[n+10] ,la=1 ; int s=0; ll ans=k; for(int i=1;i<=n;i++) { scanf("%d",&x[i]); ans+=x[i]; if(x[i]>=k)s+=x[i]/k; a[la++]=x[i]%k; } sort(a+1,a+la,cmp); //cout<<s<<"?????????"<<endl; if(s>=n-1)cout<<ans<<endl; else { int up=n-1-s; for(int i=1;i<=up;i++)ans+=k-a[i]; cout<<ans<<endl; } } return 0; }
Fishing Master HDU - 6709 (贪心)acm
标签:ati use ant fir tor follow else 排序 max
原文地址:https://www.cnblogs.com/yzxqq/p/11407985.html