HDOJ 2037今年の夏休みはACしない(欲張り)
3115 ワード
今年の夏休みは
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35083 Accepted Submission(s): 18702
Problem Description
「今年の夏休みはACじゃないの?」
「はい」
「じゃあ、何してるの?」
「ワールドカップを見て、バカ!」
“@#$%^&*%...”
確かに、ワールドカップが来て、ファンの祝日も来て、多くのACMerもパソコンを捨てて、テレビに向かっていると思います.
ファンとして、できるだけ多くの完全な試合を見たいと思っています.もちろん、新時代の良い青年として、あなたはきっと他の番組を見ます.例えば、ニュースの連播(国の大事に関心を忘れないでください)、非常に6+7、スーパー女子学生、王小娘の「楽しい辞書」など、あなたが好きなテレビ番組の中継スケジュールをすべて知っているとします.合理的に手配しますか?(できるだけ多くのフル番組が見られるのが目標)
Input
入力データには複数のテストインスタンスが含まれており、各テストインスタンスの最初の行には整数n(n<=100)が1つしかなく、好きな番組の総数を表し、次いでn行のデータであり、各行には2つのデータTi_が含まれている.s,Ti_e(1<=i<=n)は、i番目の番組の開始時間と終了時間をそれぞれ表し、問題を簡略化するために、各時間を正の整数で表す.n=0は入力終了を示し、処理を行わない.
Output
各テストインスタンスについて、完全に見られるテレビ番組の個数を出力し、各テストインスタンスの出力は1行を占める.
Sample Input
Sample Output
Author
lcy
Source
ACMプログラム設計期末試験(2006/06/07)
Recommend
lcy
考え方:終了時間を昇順に並べ替え、前の終了時間と後の開始時間を比較し、カウンタsumの初期を1とすることを覚えておく.
速い列で作る:
選択でソート(構造体のデータは一緒に並べます):
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35083 Accepted Submission(s): 18702
Problem Description
「今年の夏休みはACじゃないの?」
「はい」
「じゃあ、何してるの?」
「ワールドカップを見て、バカ!」
“@#$%^&*%...”
確かに、ワールドカップが来て、ファンの祝日も来て、多くのACMerもパソコンを捨てて、テレビに向かっていると思います.
ファンとして、できるだけ多くの完全な試合を見たいと思っています.もちろん、新時代の良い青年として、あなたはきっと他の番組を見ます.例えば、ニュースの連播(国の大事に関心を忘れないでください)、非常に6+7、スーパー女子学生、王小娘の「楽しい辞書」など、あなたが好きなテレビ番組の中継スケジュールをすべて知っているとします.合理的に手配しますか?(できるだけ多くのフル番組が見られるのが目標)
Input
入力データには複数のテストインスタンスが含まれており、各テストインスタンスの最初の行には整数n(n<=100)が1つしかなく、好きな番組の総数を表し、次いでn行のデータであり、各行には2つのデータTi_が含まれている.s,Ti_e(1<=i<=n)は、i番目の番組の開始時間と終了時間をそれぞれ表し、問題を簡略化するために、各時間を正の整数で表す.n=0は入力終了を示し、処理を行わない.
Output
各テストインスタンスについて、完全に見られるテレビ番組の個数を出力し、各テストインスタンスの出力は1行を占める.
Sample Input
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
Sample Output
5
Author
lcy
Source
ACMプログラム設計期末試験(2006/06/07)
Recommend
lcy
考え方:終了時間を昇順に並べ替え、前の終了時間と後の開始時間を比較し、カウンタsumの初期を1とすることを覚えておく.
速い列で作る:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct time{
int star,end;
}ti[101];
int cmp(const void *a,const void *b){
return (*(time *)a).end-(*(time *)b).end;
}//
int main(){
int n,i,k,sum,temp,j;
while(scanf("%d",&n)&&n!=0){
for(i=0;i<n;i++){
scanf("%d%d",&ti[i].star,&ti[i].end);
}
qsort(ti,n,sizeof(ti[0]),cmp);
k=0; sum=1;
for(i=1;i<n;i++){
if(ti[i].star>=ti[k].end){
sum++;
k=i;
}
}
printf("%d
",sum);
memset(ti,0,sizeof(ti));// !!!
}
return 0;
}
選択でソート(構造体のデータは一緒に並べます):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct time{
int star,end;
}ti[101];
int main(){
int n,i,k,sum,temp,j;
while(scanf("%d",&n)&&n!=0){
for(i=0;i<n;i++){
scanf("%d%d",&ti[i].star,&ti[i].end);
}
for(i=0;i<n;i++){
k=i;
for(j=i;j<n;j++){
if(ti[j].end<ti[k].end){
temp=ti[j].end; ti[j].end=ti[k].end; ti[k].end=temp;
temp=ti[j].star; ti[j].star=ti[k].star; ti[k].star=temp;
}
}//
}
k=0; sum=1;
for(i=1;i<n;i++){
if(ti[i].star>=ti[k].end){
sum++;
k=i;
}
}
printf("%d
",sum);
memset(ti,0,sizeof(ti));// !!!
}
return 0;
}