Mean:
每次测试数据输入一个n,然后输入n对的电视节目播放时间:开始时间及结束时间,
求这个人能看的最多的完整的节目数。
analyse:
对于这道解题,是对每个节目的结束时间排序,目的是使剩余时间留下,再判断还能看几个节目。
对节目时间的排序结束后,依次判断,这次要看的节目的开始时间是否大于上次看的节目的结束时间,
若是大于,则这个节目时可以完整观看的,若是小于则是不能完整观看的,所以跳到下一个节目继续判断 。
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include<vector> #include<queue> #include<algorithm> using namespace std; typedef long long LL; const int maxn=10005; const int INF=0x3f3f3f3f; struct node { int f, e; } s[maxn]; int cmp(const void *t1, const void *t2) { struct node *c=(struct node *)t1; struct node *d=(struct node *)t2; return c->e-d->e; } int main() { int n; while(scanf("%d", &n), n) { for(int i=0; i<n; i++) scanf("%d %d", &s[i].f, &s[i].e); qsort(s, n, sizeof(s[0]), cmp); int ans=1;///第一个节目肯定要看 for(int i=1; i<n; i++) { if(s[i].f>=s[i-1].e) ans++; else { s[i].f=s[i-1].f; s[i].e=s[i-1].e; } } printf("%d ", ans); } return 0; }