问题标题: 酷町堂:1781 检票进站

0
0
已解决
程安琪
程安琪
资深守护
资深守护

1781   检票进站

经验值:1600

时间限制:1000毫秒

内存限制:128MB

题目描述 De**ion

m 位同学一起约着去海南旅行,现在他们正在赶往火车站。

火车站共有 n 个检票口。由于检票员的操作速度不同,每个检票口的通行速度也就不同,平均测量,第 k 个检票口的速度为 tk 秒。

在候车时,精于计算的同学们就开始思考,假设一开始所有检票口都处于准备状态,每个检票口一次只能通过一人。那么他们一共 m 个人至少需要多少时间全部通过检票口。

输入描述 Input De**ion

第一行:两个整数 n ( 1 <= N <= 100000 ) 和 m ( 1 <= M <= 10^9 ),分别表示检票口数量以及同学们的人数。
接下来 n 行:每行一个整数 ti,表示每个检票口的检票时间。范围在 [ 1 , 10^9 ] 。

输出描述 Output De**ion

仅一行,输出全部通过的最少时间。

样例输入 Sample Input

7 10 3 8 3 6 9 2 4

样例输出 Sample Output

8

数据范围及提示 Data Size & Hint

对于40%的数据,m <= 20.
对于70%的数据,m <= 1000.
对于100%的数据,m <= 10^9.

 

我的0分代码 :

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],mx,sum;
bool check(int x){
    int s=x+1,cnt=0;
    for(int i=1;i<=n;i++){
        if(s-a[i]>=0){
            s+=a[i];
        }
        else{
            cnt++;
            s=a[i];   
        }
    }
    return cnt<=m;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        mx=max(mx,a[i]);
        sum+=a[i];
    }
    int l=mx,r=sum;
    while(l<r){
        int mid=(l+r)/2;
        if(check(mid))  r=mid;
        else l=mid+1;
    }
    cout<<l;
    return 0;
}
/*

*/

程安琪在2023-12-17 13:05:41追加了内容

还有一道题:

2950   丢石头

经验值:1200

时间限制:3000毫秒

内存限制:128MB

题目描述 De**ion

不知道同学们有没有玩过丢石子的游戏,哈哈,也许没有,你们都是玩电脑,小明在玩丢石头的游戏的时候丢了A个石头,假设这A个石头丢在一条直线上,现在他想从这些石头里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

输入描述 Input De**ion

第一行,两个整数,A,B。(B<=A<=100000)

第二行,A个整数,分别为这A个石头坐标。

输出描述 Output De**ion

仅一个整数,为所求答案。

样例输入 Sample Input

5 3 1 2 3 4 5

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

限时3秒

怎么写啊!


0
0
程安琪
程安琪
资深守护
资深守护

有人回复一下这个问题吗??我要结贴了

0
0
0
崔安昊
崔安昊
中级光能
中级光能

我是真没豆了发完1000多的贴就没了

0
0
程安琪
程安琪
资深守护
资深守护

啊啊!!!!!!!!!十万火急!!!!!!!!!!

0
程安琪
程安琪
资深守护
资深守护

有人吗???????

我要回答