简单题意:给定若干木棒,有长度和宽度,第一根木棒加工需要一分钟,如果第二根木棒的长度和宽度都大于或者等于第一根木棒,则不需要消耗另外的时间,以此类推;
解题思路:
首先对木棒进行排序,按照长度从小到大排序,如果长度相同,则按照重量排序,从第一根开始,以此与下一根木棒的重量比较,定义变量min=0;如果符合条件,min++;由于存在重复比较的问题,在数组里定义两个判断变量来判断该木棒是否已经进行比较过。最后比较完成,n-min=所需时间;
ac代码:
#include <iostream> #include <algorithm> struct mm { int l; int w; int x; int v; }a[5001]; int cmp( mm a,mm b) { if(a.l==b.l) return a.w<b.w; if(a.l<b.l) return true; return false; } using namespace std; int main() { int n,N,i,j,min=0,y; cin>>N; while(N-->0) { cin>>n; for(i=0;i<n;i++) { cin>>a[i].l>>a[i].w; a[i].x=0; a[i].v=0; }int m=0; sort(a,a+n,cmp); for(i=0;i<n;m++) {i=m; for(j=i+1;j<n;) { if(a[i].w>a[j].w||a[j].x==1) { j++; continue; } if(a[i].w<=a[j].w&&a[j].x!=1) { if(a[i].x==1) {j++; continue; } min++; i=j; a[j].v=1;j=i+1; continue; } } for( y=0;y<n;y++) a[y].x=a[y].v; } cout<<n-min<<endl; min=0; } return 0; }
感想:当有多次重复比较是,可以设置相关变量来判断是否符合比较条件;
时间: 2024-10-25 22:30:05