2 条题解

  • 0
    @ 2026-9-23 16:05:22

    思路

    首先想到贪心。

    我们把这个问题放到数轴上。就变成了找到符合条件的数 xx 使得 xx 与所有 tit_i 在数轴上的点之间距离和的最小值尽可能的大。也就是求:

    min⁡(ti−ti−12)\min(\frac{t_i-t_{i-1}}{2})

    最后不要忘记特判 t1t_1 和 tkt_k 的特殊情况。问题迎刃而解。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int t[10006];
    int n, k, ans = -1e9;
    signed main() {
    	cin >>n >>k;
    	for(int i = 1; i <= k; i++) {
    		cin >> t[i];	
    	}
      //排序,方便判断
    	sort(t + 1, t + k + 1);
      //核心,找最大值
    	for(int i = 1; i < k; i++) {
    		ans = max(ans, (t[i + 1] - t[i]) / 2);
    	}
      //特判
    	ans = max(ans, t[1]);
    	ans = max(ans, n - t[k]);
    	cout << ans;
    	return 0;
    }
    
    
    • 0
      @ 2026-2-1 18:54:53

      本题是思维题,码量少,题解仅供参考:

      #include<bits/stdc++.h>
      using namespace std;
      int a[10010];
      int main()
      {
      	int n,m;cin>>n>>m;
      	for(int i=1;i<=m;i++)cin>>a[i];
      	sort(a+1,a+m+1);
      	int mx=0;
      	for(int i=2;i<=m;i++)mx=max(mx,(a[i]-a[i-1])/2);
      	mx=max(mx,max(a[1],n-a[m]));
      	cout<<mx;
      	return 0;
      }
      • 1

      信息

      ID
      1635
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      递交数
      70
      已通过
      11
      上传者