Sicily 1046. Plane Spotting

来源:互联网 发布:linux kvm web控制面板 编辑:程序博客网 时间:2024/05/17 02:08
/*全部插入之后根据题目说明的规则进行排序,从大到小输出 小明很喜欢拍飞机,然后他希望在某一时间段里拍多架飞机。每个样例第一行三个数分别表示可选的连续的quarter数、小明需要的前N位最优解、小明等待的quarter数的最小值,第二行是表示每个可选的连续的quarter里面经过飞机的数目。*//*Run Time: 0.02secsRun Memory: 1472KB*/#include <iostream>#include <vector>#include <algorithm> using namespace std;struct one{    int left;    int right;    int num;    double per;    int diff;};int quarterNum;  //quarter总数量 int resultNum;   //需要的结果数量 int minQuarter;  //需要的最少quarter数量 int quarters[301];   //每个quarter的情况 vector<one> results;//获取所有可能的结果 void getAll(){    for(int i=0; i<quarterNum-minQuarter+1; i++){        for(int j=i+minQuarter-1; j<quarterNum; j++){            one buf;            buf.left = i;            buf.right = j;            buf.num = 0;            for(int k=i; k<=j; k++)                buf.num += quarters[k];            buf.per = ((double)buf.num) / (double)(j-i+1);            buf.diff = j - i + 1;                        results.push_back(buf);         }    }}//这次需要从大到小的排血 int cmp(one a, one b){    if(a.per != b.per){        return a.per > b.per;    //飞机平均数量多者更大     }else{        if(a.diff != b.diff){            return a.diff > b.diff;     //飞机数量相同时,quarter更长者更大         }else{            return a.right < b.right;  //飞机数量和时间都相等,则更早结束的更大         }     } } int main(){        int T;    cin >> T;    int TT = T;    while (T>0){          T--;              cin >> quarterNum >> resultNum >> minQuarter;        for(int i=0; i< quarterNum; i++)            cin >> quarters[i];                getAll();    //获取所有可能的结果                cout << "Result for run " << TT-T << ":" << endl;        if(results.size() != 0){             sort(results.begin(), results.end(), cmp);   //对所有结果进行排序             for(int i=0; i<results.size()&&i<resultNum; i++){                cout << results[i].left+1 << "-" << results[i].right+1 << endl;                             }        }          results.clear();      }    return 0;}

原创粉丝点击