【欲張り】【並べ替え】【codevs 1214】線分被覆
1547 ワード
1214線分オーバーライド
時間制限:1 s
スペース制限:128,000 KB
黄金ゴールドゴールド
テーマ説明Description
所与のx軸上のN(0
入力記述Input Description
入力の最初の行は整数Nです.次にN行があり、各行に2つのスペースで区切られた整数があり、1つのセグメントの2つの端点の座標を表します.
出力記述Output Description
出力の最初の行は、残りのセグメント数を表す整数です.
サンプル入力Sample Input
3
6 3
1 3
2 5
サンプル出力Sample Output
2
データ範囲とヒントData Size&Hint
0
線分の右端を並べ替えて、一番左からスキャンすればいいです.
Code:
時間制限:1 s
スペース制限:128,000 KB
黄金ゴールドゴールド
テーマ説明Description
所与のx軸上のN(0
入力記述Input Description
入力の最初の行は整数Nです.次にN行があり、各行に2つのスペースで区切られた整数があり、1つのセグメントの2つの端点の座標を表します.
出力記述Output Description
出力の最初の行は、残りのセグメント数を表す整数です.
サンプル入力Sample Input
3
6 3
1 3
2 5
サンプル出力Sample Output
2
データ範囲とヒントData Size&Hint
0
線分の右端を並べ替えて、一番左からスキャンすればいいです.
Code:
#include
#include
#include
#include
using namespace std;
typedef struct number
{
int x,y;
};
int cmp(number a,number b)
{
return a.x < b.x;
}
int main()
{
int n,x,y;
scanf("%d",&n);
{
number num[110];
memset(num,0,sizeof(num));
for(int i = 0; i < n; i++)
{
scanf("%d%d",&x,&y);
if(y < x){
num[i].x = y;
num[i].y = x;}
else{
num[i].x = x;
num[i].y = y;
}
}
sort(num,num+n,cmp);
int t = n;
number tmp = num[0];
for(int i = 1; i < n; i++)
{
if(tmp.x <= num[i].x && tmp.y >= num[i].y)
{
t--;
tmp = num[i];
}
else if(num[i].x < tmp.y && num[i].y > tmp.y)
{
t--;
}
else tmp=num[i];
}
printf("%d
",t);
}
return 0;
}