题意:给你n个木块的长和宽,现在要把它送去加工,这里怎么说呢,就是放一个木块花费一分钟,如果后面木块的长和宽大于等于前面木块的长和宽就不需要花费时间,否则时间+1,问把这个木块送去加工的最短时间。
思路:还是结构体排序,长相等就以宽来排序,如果一个木块被送去加工了标记它不存在就可以了;
1 #include<iostream> 2 #include<cmath> 3 #include<algorithm> 4 using namespace std; 5 struct wood{ 6 int l,r; 7 int vi; 8 }p[5050]; 9 int cmp(wood a,wood b) 10 { 11 if(a.l==b.l) 12 return a.r<b.r; 13 return a.l < b.l; 14 } 15 int main() 16 { 17 int t; cin >> t; 18 while(t--){ 19 int n;cin >> n; 20 for(int i=0;i<n;++i){ 21 cin >> p[i].l >> p[i].r; 22 p[i].vi=1; 23 } 24 sort(p,p+n,cmp); //如果满足 l<=l‘ and w<=w‘,则必然满足 l<=l‘,所以先以它的大小排个序 25 int sum,count; 26 sum=count=0; 27 while(count<n){ // 然后反复找 28 int kl=-1,kr=-1; 29 for(int i=0;i<n;++i){ 30 if(p[i].vi&&p[i].l>=kl&&p[i].r>=kr){ 31 p[i].vi=0;kl=p[i].l;kr=p[i].r; 32 ++count; 33 } 34 } 35 ++sum; 36 } 37 cout << sum << endl; 38 } 39 return 0; 40 }
时间: 2024-10-09 04:01:59