NC218841. 苏幕遮--寻姻缘
描述
输入描述
第一行一个整数表示测试组数。每组数据第一行一个整数表示线段个数。接下来行每行两个整数表示左端点和右端点。
输出描述
每组数据输出三个整数,最大契合度以及两个线段的下标。线段下标从开始,你的输出应该满足,并且两线段的重合长度为最大契合度。如果有多种可能,你可以输出任意一种。
示例1
输入:
3 3 3 5 4 5 2 4 3 2 4 2 5 3 4 3 1 2 2 3 3 4
输出:
1 1 2 2 2 1 0 1 3
C++(clang++11) 解法, 执行用时: 388ms, 内存消耗: 20876K, 提交时间: 2021-03-24 23:01:09
#include<bits/stdc++.h> using namespace std; struct node { int l,r,id; }e[100010]; signed main() { int t,n; cin>>t; while(t--) { cin>>n; for(int i=1;i<=n;i++) { scanf("%d %d",&e[i].l,&e[i].r); e[i].id=i; } sort(e+1,e+n+1,[](node x,node y)//加编译选项 { return x.l<y.l; }); int d1=1,d2=2,a,b=-1,lon=0,len; for(int i=1;i<=n;i++) { len=e[i].r-e[i].l; if(b>e[i].l) { len=min(len,b-e[i].l); if(len>lon) { lon=len; d1=e[i].id; d2=a; } } if(e[i].r>=b) { b=e[i].r; a=e[i].id; } } cout<<lon<<" "<<d1<<" "<<d2<<endl; } return 0; }