脑洞题。http://blog.csdn.net/dgq8211/article/details/7748078
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; struct abc { int A,B; }x[100010]; int T,N; int Max[100010]; bool cmp(const abc&a,const abc&b) { return a.A<b.A; } int main() { scanf("%d",&T); for(int t=1;t<=T;t++) { scanf("%d",&N); for(int i=0;i<N;i++) scanf("%d%d",&x[i].A,&x[i].B); sort(x,x+N,cmp); memset(Max,0,sizeof Max); int ans=0x7FFFFFFF; Max[N-1]=x[N-1].B; for(int i=N-2;i>=0;i--) Max[i]=max(Max[i+1],x[i].B); for(int i=0;i<N;i++) ans=min(ans,x[i].A+Max[i+1]); printf("Case %d: %d ",t,ans); } return 0; }