题意:当l<=l'和w<=w'时,那么不需要花费时间,否则需要花费1分钟,求最短时间。
第一个想法就是先按l非递减顺序(一定要记得判断==的情况,因为这个WA一发)排序(按w也可以),然后开一个vis数组判断该值是不是被取过(此处无需担心该值是不是不应该在此队列里,因为每一个值都会被选入一个队列中,等效了),实时更新minn,minm的值。
#include<bits/stdc++.h>
using namespace std;
long long int mod = 100000007;
struct Node{
int x,y;
};
Node a[1000005];
bool cum(Node a,Node b){
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int vis[1000005];
int main()
{
int t;
scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
int n;
scanf("%d",&n);
for(int i = 0;i<n;i++){
cin>>a[i].x>>a[i].y;
}
sort(a,a+n,cum);
int sum = 0;
for(int i = 0;i<n;i++){
if(!vis[i]){
sum++;
int minn = a[i].x,minm = a[i].y;
for(int j = i+1;j<n;j++){
if(!vis[j]){
if(a[j].x>=minn&&a[j].y>=minm){
vis[j] = 1;
minn = a[j].x;
minm = a[j].y;
}
}
}
}
}
cout<<sum<<endl;
}
return 0;
}