题意:有N个人,第 i 个人的头发长度为Ai, 问最少过多少天有P个人的头发长度打渔T?
思路:开一数组将数据存进去,定义一个计数器和动态数组,遍历数组,如果Ai>=T 计数器加一,否则将T-Ai的值加进动态数组,之后先判断计数器是否大于等于P,如果符合条件直接输出0,否则用sort函数将动态数组进行排序,再遍历动态数组,每循环一次P就减一,直到P等于计数器,就将当前数组的值输出,并跳出循环
原题链接:https://atcoder.jp/contests/abc363/tasks/abc363_b
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
vector<int> v;
int main()
{
int n,t,p;
cin>>n>>t>>p;
int cnt=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(x>=t)cnt++;
else{
v.push_back(t-x);
}
}
if(cnt>=p)cout<<0;
else{
int x=p-cnt;
int ans;
sort(v.begin(),v.end());
for(auto c:v)
{
if(x)ans=c,x--;
else break;
}
cout<<ans;
}
return 0;
}