12 条题解

  • 1
    @ 2025-9-21 12:20:48
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int L,n,m;
    int a[N],l,r,ans;
    bool check(int mid){
    	int last=0;
    	int sum=0;
    	for(int i=1;i<=n;i++){
    		if(a[i]-last<mid){
    			sum++;
    		}
    		else{
    			last=a[i];
    		}
    	}
    	return sum<=m;
    }
    int main(){
    	cin>>L>>n>>m;
    	for(int i=1;i<=n;i++)
    		cin>>a[i];
    	a[++n]=L;
    	r=L;
    	while(l<=r){
    		int mid=l+r>>1;
    		if(check(mid)){
    			ans=mid;
    			l=mid+1;
    		}
    		else
    			r=mid-1;
    	}
    	cout<<ans;
    
    }
    
    
    • 1
      @ 2024-12-17 17:32:05
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int L,n,m;
      int a[N],l,r,ans;
      bool check(int mid){
      	int last=0;
      	int sum=0;
      	for(int i=1;i<=n;i++){
      		if(a[i]-last<mid){
      			sum++;
      		}
      		else{
      			last=a[i];
      		}
      	}
      	return sum<=m;
      }
      int main(){
      	cin>>L>>n>>m;
      	for(int i=1;i<=n;i++)
      		cin>>a[i];
      	a[++n]=L;
      	r=L;
      	while(l<=r){
      		int mid=l+r>>1;
      		if(check(mid)){
      			ans=mid;
      			l=mid+1;
      		}
      		else
      			r=mid-1;
      	}
      	cout<<ans;
      
      }
      小鸟
      
      • 0
        @ 2026-3-27 20:36:43
        #include<bits/stdc++.h>
        using namespace std;
        int L,n,m,a[50004],l,r,ans;
        bool check(int mid)
        {
        	int last=0,sum=0;
        	for(int i=1;i<=n;i++)
        		a[i]-last>=mid?last=a[i]:sum++;
        	return sum<=m;
        }
        int main()
        {
            ios::sync_with_stdio(0);
            cin.tie(0);
           	scanf("%d%d%d",&L,&n,&m);
           	for(int i=1;i<=n;i++)
           		scanf("%d",&a[i]);
           	a[++n]=L,l=1,r=L;
           	while(l<=r)
           	{
        	   	int mid=(l+r)>>1;
        	   	check(mid)?ans=mid,l=mid+1:r=mid-1;
        	}
           	printf("%d",ans);
           	return 0;
        }
        
        • 0
          @ 2025-8-6 16:16:21
          #include<bits/stdc++.h>
          using namespace std;
          int n,m,L,maxx=-1;
          int a[10000005];
          int check(int x){
          	int sum=0,now=0;
          	for(int i=1; i<=n; i++){
          		if(a[i]-a[now]<x) sum++;
          		else now=i;
          	}
          	return sum<=m; 
          }
          int main(){
          	cin >> L >> n >> m;
          	for(int i=1; i<=n; i++){
          		cin >> a[i];		
          	}
          	a[n+1]=L;
          	int l=0,r=L,mid;
          	while (l<r){
          		mid=(l+r+1)/2;
          		if(check(mid)){
          			l=mid;
          		}
          		else r=mid-1;
          	}
          	cout << r;
          	return 0;
          }
          
          • 0
            @ 2024-7-30 11:17:25

            #include

            #include

            #include

            #include

            #include

            #include

            using namespace std;

            const int N = 5e4 +10;

            const int INF=0x3f3f3f;

            int n,mid,m,a[N],l,r,ans,L;

            bool check(int k){

            int last = 0;

            int sum = 0;

            for(int i = 1;i<=n;i++){

            if(a[i] - last < k)

            sum++;

            else

            last = a[i];

            }

            return sum <= m;

            }

            int main(){

            cin>>L>>n>>m;

            for(int i = 1;i<=n;i++)

            cin>>a[i];

            a[++n] = L;

            r = L;

            while(l<=r){

            int mid = l + r >>1;

            if(check(mid)){

            ans = mid;

            l = mid + 1;

            }

            else

            r = mid - 1;

            }

            cout<<ans;

            }

            • 0
              @ 2024-7-30 11:14:57

              #include <bits/stdc++.h> using namespace std; int L,n,m; const int N=1e5+10; int a[N],l,r,ans; bool check(int mid){ int last = 0; int sum=0; for(int i=1;i<=n;i++) if(a[i]-last<mid){ sum++; } else{ last=a[i]; }

              return sum<=m;
              

              } int main(){ cin>>L>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; } a[++n]=L; r=L; while(l<=r){ int mid=l+r>>1; if(check(mid)){ ans=mid; l=mid+1; } else{ r=mid-1; } } cout<<ans; return 0;

              }

              • 0
                @ 2023-5-14 19:31:13
                #include<bits/stdc++.h>
                using namespace std;
                int L,n,m,a[100000];
                int p(int x){
                    int p=0,q=0;
                    for(int i=1;i<=n;i++)
                    if(a[i]-p<x)q++;
                    else p=a[i];
                    return q;
                }
                int main(){
                    cin>>L>>n>>m;
                    for(int i=1;i<=n;i++)
                    cin>>a[i];
                    a[++n]=L;
                    int l=0,r=L;
                    int ans=-111;
                    while(l<=r){
                        int mid=(l+r)/2;
                        int x=p(mid);
                        if(x<=m)l=mid+1,ans=mid;
                        else r=mid-1;
                    }
                    cout<<ans;
                }
                
                • 0
                  @ 2022-5-14 11:25:07
                  #include <queue>
                  #include <math.h>
                  #include <stack>
                  #include <stdio.h>
                  #include <iostream>
                  #include <vector>
                  #include <iomanip>
                  #include <string.h>
                  #include <algorithm>
                  using namespace std;
                  #define LL long long
                  const int N = 1e6 + 10;
                  const int INF = 0x3f3f3f3f;
                  LL a[N];
                  LL k, n,m;
                  bool cheak(int x)
                  {
                  	int pre=0;
                  	int sum = 0;
                  	for(int i=1;i<=n;i++)
                  	{
                  		if(a[i]-pre<x)
                  			sum++;
                  		else
                  			pre=a[i];
                  		if(sum>m)
                  			return false; 
                  	}
                  	return true;
                  }
                  int find()
                  {
                  	int l,r;
                  	l=1,r=k;
                  	while(l<r)
                  	{
                  		int mid=l+r+1>>1;
                  		if(cheak(mid))
                  			l=mid;
                  		else
                  			r=mid-1;
                  	}
                  	return l;
                  }
                  int main()
                  {
                  	cin >>k>>n>>m;
                  	for(int i=1;i<=n;i++)
                  		scanf("%lld",&a[i]);
                  	a[0]=0;
                  	a[++n]=k;
                  	cout << find()<<endl;
                  	return 0; 
                  }
                  
                  
                  • 0
                    @ 2021-12-25 19:46:23
                    /*****************************************
                    备注:
                    ******************************************/
                    #include <queue>
                    #include <math.h>
                    #include <stack>
                    #include <stdio.h>
                    #include <iostream>
                    #include <vector>
                    #include <iomanip>
                    #include <string.h>
                    #include <algorithm>
                    using namespace std;
                    #define LL long long
                    const int N = 1e5 + 10;
                    const int INF = 0x3f3f3f3f;
                    LL n,m,k;
                    LL a[N];
                    bool cheak(int mid)
                    {
                    	int pre=0;
                    	int cnt=0;
                    	for(int i=1;i<=m+1;i++)
                    	{
                    		if(a[i]-pre<mid)
                    		{
                    			cnt++;
                    			if(cnt>k)
                    				return false;
                    		}
                    		else
                    			pre=a[i];
                    	}
                    	return true;
                    }
                    int main()
                    {
                    	cin>>n>>m>>k;
                    	for(int i=1;i<=m;i++)
                    		cin>>a[i];
                    	a[0]=0;
                    	a[m+1]=n;
                    	LL l=1,r=n;
                    	while(l<r)
                    	{
                    		LL mid=l+r+1>>1;
                    		if(cheak(mid))
                    		{
                    			l=mid;
                    		}
                    		else
                    			r=mid-1;	
                    	}
                    	cout<<l<<endl;
                    	return 0;
                    }
                    
                    • 0
                      @ 2021-12-5 18:04:48
                      /*****************************************
                      备注:
                      ******************************************/
                      #include <queue>
                      #include <math.h>
                      #include <stack>
                      #include <stdio.h>
                      #include <iostream>
                      #include <vector>
                      #include <iomanip>
                      #include <string.h>
                      #include <algorithm>
                      using namespace std;
                      #define LL long long
                      const int N = 1e5 + 10;
                      const int INF = 0x3f3f3f3f;
                      int main()
                      {
                      	while(l < r) // 最小值的最大值
                      	{
                      		int mid = l + r + 1 >> 1;
                      		if(cheak(mid))
                      			l = mid;
                      		else 
                      			r = mid -1 ;
                      	}
                      	cout << l << endl;
                      
                      
                      	while(l < r) // 最大值的最小值
                      	{
                      		int mid = l + r >> 1;
                      		if(cheak(mid))
                      			r = mid;
                      		else 
                      			l = mid + 1;
                      	}
                      	cout << r << endl;
                      
                      
                      	while(l <= r) // 二分搜索
                      	{
                      		int mid = l + r >> 1;
                      		if(a[mid] == k)
                      		{
                      			cout << mid ;
                      			break;
                      		}
                      		else if(a[mid] > k) 
                      		{
                      			r = mid - 1;
                      		}
                      		else 
                      		{
                      			l = mid + 1;
                      		}
                      	}
                      	return 0;
                      }
                      
                      • -1
                        @ 2025-9-27 17:03:22
                        #include<bits/stdc++.h>
                        using namespace std;
                        int n,m,L,maxx=-1;
                        int a[10000005];
                        int check(int x){
                        	int sum=0,now=0;
                        	for(int i=1; i<=n; i++){
                        		if(a[i]-a[now]<x) sum++;
                        		else now=i;
                        	}
                        	return sum<=m; 
                        }
                        int main(){
                        	cin >> L >> n >> m;
                        	for(int i=1; i<=n; i++){
                        		cin >> a[i];		
                        	}
                        	a[n+1]=L;
                        	int l=0,r=L,mid;
                        	while (l<r){
                        		mid=(l+r+1)/2;
                        		if(check(mid)){
                        			l=mid;
                        		}
                        		else r=mid-1;
                        	}
                        	cout << r;
                        	return 0;
                        }
                        
                        • -1
                          @ 2024-11-3 16:24:56
                          /*
                          int      %o/%lo 8 %d/%i/%ld/%li 10 %x/%lx 16
                          longlong %lld
                          float    %f/%e
                          double   %lf/%le
                          char     %c
                          char[]   %s
                          'a'=97
                          'z'=122
                          'A'=65
                          'Z'=90
                          '0'=48
                          '9'=57
                          */
                          #include <iostream>
                          #include <iomanip>
                          #include <cmath>
                          #include <cstdio>
                          #include <cstring>
                          #include <algorithm>
                          #include <ctime>
                          #include <limits>
                          #include <assert.h>
                          #include <stdlib.h>
                          using namespace std;
                          #define LL long long
                          #define ull unsigned long long
                          const int N=1e5+10;
                          const int INF=0x3f3f3f3f;
                          const double pi=3.1416;
                          int L,n,m,a[N],ans,l,r;
                          bool check(int mid){
                          	int last=0,sum=0;
                          	for(int i=1;i<=n;i++){
                          		if(a[i]-last<mid){
                          			sum++;
                          		}else{
                          			last=a[i];
                          		}
                          	}
                          	return sum<=m;
                          }
                          int main(){
                          	cin>>L>>n>>m;
                          	for(int i=1;i<=n;i++){
                          		cin>>a[i];
                          	}
                          	a[++n]=L;
                          	l=1,r=L;
                          	while(l<=r){
                          		int mid=(l+r)>>1;
                          		if(check(mid)){
                          			ans=mid;
                          			l=mid+1;
                          		}else{
                          			r=mid-1;
                          		}
                          	}
                          	cout<<ans;
                          return 0;
                          }
                          
                          • 1

                          信息

                          ID
                          755
                          时间
                          1000ms
                          内存
                          128MiB
                          难度
                          6
                          标签
                          递交数
                          778
                          已通过
                          240
                          上传者