标签:cstring rom text put com code inline logs ota
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8270 | Accepted: 3268 |
Description
Input
Output
Sample Input
5 5 6 1 4 10 10 6 9 8 10
Sample Output
1 4 5 10
题目大意:
合并n个区间。。(为什么我看学长们写的题目大意都那么长==)
题解:
贪心思想,排个序再合并即可。
按照左端排序,能合并就合并,
不能合并则前面的区间一定不能被后面的合并,输出前面的区间。
代码:
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; struct data{int a,b;}set[50001]; bool cmp(data x,data y) {return x.a<y.a;} //按左端点排序 inline int read(){ int x=0,f=1; char c=getchar(); for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘; return x*f; } int main(){ int N=read(); for(int i=1;i<=N;i++) set[i].a=read(), set[i].b=read(); sort(set+1,set+1+N,cmp); int left=set[1].a, right=set[1].b; //判断能否合并的参照值 for(int i=1;i<=N;i++){ //可以合并 if(set[i].a>=left && set[i].a<=right){ if(set[i].b>right) right=set[i].b; } //不可合并 else{ printf("%d %d\n",left,right); //输出 //修改参照值 left=set[i].a; right=set[i].b; } } printf("%d %d\n",left,right); //system("pause"); return 0; }
标签:cstring rom text put com code inline logs ota
原文地址:http://www.cnblogs.com/YSFAC/p/6920588.html