您的位置:首页 > 其它

sicily 1046 Plane Spotting

2011-04-21 14:06 387 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: