wikioi 1214 线段覆盖

来源:互联网 发布:c语言比较4个数大小 编辑:程序博客网 时间:2024/04/29 00:58
/*这是别人的思路,我只是实现了他的思路, struct Line{    int x;    int y;};用上述结构体来保存线段一、输入线段后,调整每条线段,使每条线段的x小于y;二、对所有线段以y为关键字进行升序排序(可以用qsort ());三、假设排序后的第一条线段为L1,下一条线段为L2。 若L2.x 在L1.y之前,则L2与L1有公共点,不符合要求;反之,L2与L1无公共点,符合要求。若L2不符合要求,删除它(实际程序中并不用删除),下一条线段L3还是与L1比较;若L2符合要求,则L3变与L2比较。。。。以此类推,直到最后一条线段。**  */#include <iostream>#include <cstdlib>#include <cstring>using namespace std;struct line{int x;int y;}stu[ 100 ];int vis[ 100 ];void max( int &a, int &b ){if( a > b ){a = a + b;b = a - b;a = a - b;} }int cmp( const void *a, const void *b ){return (*( line * )a).y - (*( line * )b).y;}int main(){memset( vis, 0, sizeof( vis ) ); int num, i, j;cin >> num;int temp = num;for( i = 0; i < num; i++ ){cin >> stu[ i ].x >> stu[ i ].y;max( stu[ i ].x, stu[ i ].y );}qsort( stu, num, sizeof( stu[0] ), cmp );for( i = 0,j = i + 1; i < num && j < num; ){if( stu[ j ].x >= stu[ i ]. y){i = j;j = i + 1;}else{temp--;j++;}}cout << temp << endl;return 0;}

0 0