sicily 1046 Plane Spotting

// source code of submission 722250, Zhongshan University Online Judge System #include <iostream> #include <algorithm> using namespace std; struct node { float p_air; //某个时间段里的平均飞机数 int first; //时间段起点 int last; //时间段终点 int time; //时间段的持续时间 } spot[100000]; int cmp(node a,node b) { if(a.p_air!=b.p_air) //p_air大者优先 return a.p_air>b.p_air; else { if(a.time!=b.time) return a.time>b.time;//p_air相同时,time大着优先 else return a.last<b.last; //如果p_air和time都相等,则结束时间早者优先 } } int main() { int t,n,i,j,k; int req,quar,test = 1; int per[306]; cin>>t; while(t--) { cin>>n>>req>>quar; for(i = 1;i<=n;i++) //注意:这里从1开始计数 cin>>per[i]; int r = 0; for(i = 1;i+quar-1<=n;i++) for(j = quar+i-1;j<=n;j++) { float sum = 0; for(k = i;k<=j;k++) sum += per[k]; spot[r].p_air = sum/(j-i+1),spot[r].first = i,spot[r].last = j,spot[r].time = j-i+1; r++; } sort(spot,spot+r,cmp); cout<<"Result for run "<<test<<":"<<endl; if(r>=req) //如果可选择的时间段数目>=所需的时间段数目最大值 { for(i = 0;i<req;i++) cout<<spot[i].first<<"-"<<spot[i].last<<endl; } else //可选时间段不足,则输出所有 { for(i = 0;i<r;i++) cout<<spot[i].first<<"-"<<spot[i].last<<endl; } test++; } return 0; }

你可能感兴趣的:(float,AIR)