6 条题解

  • 2
    @ 2024-10-22 22:18:25

    第一部分 分析

    把题目转换得:一堆竹竿被固定在一个点上,旋转竹竿求覆盖最大区间。 我们可以把竹竿从标记处分成两半,将两端长度扔到一个数组里去,对这个数组排序,最大的两个就是能放到标记点左边和右边能达到的最长长度,加起来就是答案。

    第二部分 代码

    #include <iostream>
    #include <algorithm>
    using namespace std;
    long long n,a[100010],b[100010],c[100010],cnt;
    int main() {
    	cin>>n;
    	for(int i=1; i<=n; i++) {
    		cin>>a[i]>>b[i];
    		c[++cnt]=a[i]-b[i];
    		c[++cnt]=b[i];//记录两端长度
    	}
        sort(c+1,c+cnt+1);//排序
        cout<<c[cnt]+c[cnt-1];//输出答案
    	return 0;
    }
    

    信息

    ID
    81
    时间
    3000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    1027
    已通过
    251
    上传者