这是WA代码 一直找不到原因 案例能通过
#include <iostream>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <list>
using namespace std;
const int Max=100;
//要求看的节目数量最多,从而可使用贪心的算法尽可能多看,首先是将数据按照节目结束时间从小到大排序,越是结束时间早,
//越是可以屯出时间去看下一个节目,看一个节目后,检查排序后相邻的下一个节目的start是否大于或者等于当前节目的end,
//如果大成立则下一个节目是下次准备看的节目,否则再往下继续找,直到满足条件为止
int main(){
int n;
while (scanf("%d",&n)!=EOF) {
if(n==0)return 0;
int Ti[Max][2];
for (int i=0; i<n; i++) {
scanf("%d %d",&Ti[i][0],&Ti[i][1]);
}
int count=0;
//使用冒泡排序将数据按照节目结束时间从小到大排序,越是结束时间早,
//越是可以屯出时间去看下一个节目
for(int i=0;i<n-1;i++)
for(int j=i;j<n-1-i;j++){
if(Ti[j][1]>Ti[j+1][1]){
swap(Ti[j+1][1], Ti[j][1]);
swap(Ti[j+1][0], Ti[j][0]);
}
}
// 看一个节目后,检查排序后相邻的下一个节目的start是否大于或者等于当前节目的end,
// 如果大成立则下一个节目是下次准备看的节目,否则再往下继续找,直到满足条件为止
int k=-1;
for(int i=0;i<n-1;i++)
if(Ti[i][0]>=k){
count++;
k=Ti[i][1];
}
cout<<count<<endl;
}
return 0;
}
现在从网上找到的AC代码,能AC的好像都是用到结构,不能用数组表示开始和结束时间吗?
#include <iostream>
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <list>
using namespace std;
const int Max=100;
//要求看的节目数量最多,从而可使用贪心的算法尽可能多看,首先是将数据按照节目结束时间从小到大排序,越是结束时间早,
//越是可以屯出时间去看下一个节目,看一个节目后,检查排序后相邻的下一个节目的start是否大于或者等于当前节目的end,
//如果大于成立则下一个节目是下次准备看的节目,否则再往下继续找,直到满足条件为止
struct Node{
int start;
int end;
};
struct Node node[105];
int cmp(struct Node a,struct Node b){
if(a.end!=b.end)return a.end<b.end;
return 0;
}
int main(){
int n;
while (scanf("%d",&n)!=EOF) {
if(n==0)return 0;
// int Ti[Max][2];
for (int i=0; i<n; i++) {
// scanf("%d %d",&Ti[i][0],&Ti[i][1]);
cin>>node[i].start>>node[i].end;
}
int cnt=0;
//使用冒泡排序将数据按照节目结束时间从小到大排序,越是结束时间早,
//越是可以屯出时间去看下一个节目
sort(node, node+n, cmp);
// for(int i=0;i<n-1;i++)
// for(int j=i;j<n-1-i;j++){
// if(Ti[j][1]>Ti[j+1][1]){
// swap(Ti[j+1][1], Ti[j][1]);
// swap(Ti[j+1][0], Ti[j][0]);
// }
// }
// 看一个节目后,检查排序后相邻的下一个节目的start是否大于或者等于当前节目的end,
// 如果大于成立则下一个节目是下次准备看的节目,否则再往下继续找,直到满足条件为止
int k=0;
for (int i=0; i<n; i++) {
if(node[i].start>=k){
cnt++;
k=node[i].end;
}
}
// int k=-1;
// for(int i=0;i<n-1;i++)
// if(Ti[i][0]>=k){
// count++;
// k=Ti[i][1];
// }
cout<<cnt<<endl;
}
return 0;
}