11 条题解

  • 1
    @ 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;
    }
    
    • 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;
      
      }
      小鸟
      
      • 1
        @ 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; 
        }
        
        
        • 1
          @ 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;
          }
          
          • 0
            @ 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;
            }
            
            • 0
              @ 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;
              
              }
              
              
              • 0
                @ 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;
                }
                
                • 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
                      @ 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;
                      }
                      
                      • -1
                        @ 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;
                        }
                        
                        • 1

                        信息

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