首页 > 代码库 > 清北第一套题(zhx)

清北第一套题(zhx)

                                        死亡

【问题描述】

现在有个位置可以打sif,有个人在排队等着打sif。现在告诉你前个人每个人需要多长的时间打sif,问你第个人什么时候才能打sif。(前个人必须按照顺序来)

【输入格式】

第一行两个整数如上所述。

接下来行每行一个整数代表每个人所需要用的时间。

【输出格式】

一行一个整数表示答案。

【样例输入】

3 2

1

1

1

【样例输出】

1

【样例解释】

山里有座庙。

【数据规模与约定】

对于的100%数据,每个人所需用的时间不超过10^5。

测试点

  

测试点

  

1

10

10

1

5000

500

2

20

10

2

100000

5000

3

50

10

3

100000

10000

4

1000

500

4

100000

20000

5

2000

500

5

100000

50000

 

题解:用一个优先队列轻松解决。由于优先队列由大到小排列,因此可以将时间的相反数压入队列,每次取栈顶元素。

 

 

技术分享
#include<cstdio>#include<iostream>#include<queue>#include<algorithm>#include<cstring>#define N 100100using namespace std;int n,m;int t[N];long long ans;priority_queue<long long> q;int main(){    freopen("death.in","r",stdin);    freopen("death.out","w",stdout);    scanf("%d%d",&n,&m);    for (int i=1;i<=n;i++) scanf("%d",&t[i]);    for (int i=1;i<=m;i++)      q.push(0);    for (int i=1;i<=n;i++)      {           long long k=q.top();           q.pop();           k=-k;           k+=t[i];           k=-k;           q.push(k);//取相反数压入栈中       }    ans=-q.top();    cout<<ans<<endl;    fclose(stdin);    fclose(stdout);        return 0;}
优先队列

 

清北第一套题(zhx)