1046. Plane Spotting

文章介绍了一种用于飞机观测的时间优化算法,通过收集连续十五分钟内的飞机数量统计数据,计算特定时间段内的平均飞机数量,并以此来规划最高效的时间段进行观测。算法考虑了时间段长度和结束时间等因素,确保观测计划既高效又合理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1046. Plane Spotting

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Craig is fond of planes. Making photographs of planes forms a major part of his daily life. Since he tries to stimulate his social life, and since it’s quite a drive from his home to the airport, Craig tries to be very efficient by investigating what the optimal times are for his plane spotting. Together with some friends he has collected statistics of the number of passing planes in consecutive periods of fifteen minutes (which for obvious reasons we shall call ‘quarters’). In order to plan his trips as efficiently as possible, he is interested in the average number of planes over a certain time period. This way he will get the best return for the time invested. Furthermore, in order to plan his trips with his other activities, he wants to have a list of possible time periods to choose from. These time periods must be ordered such that the most preferable time period is at the top, followed by the next preferable time period, etc. etc. The following rules define which is the order between time periods:

1. A period has to consist of at least a certain number of quarters, since Craig will not drive three hours to be there for just one measly quarter.
2. A period P1 is better than another period P2 if:
* the number of planes per quarter in P1 is higher than in P2;
* the numbers are equal but P1 is a longer period (more quarters);
* the numbers are equal and they are equally long, but period P1 ends earlier.

Now Craig is not a clever programmer, so he needs someone who will write the good stuff: that means you. So, given input consisting of the number of planes per quarter and the requested number of periods, you will calculate the requested list of optimal periods. If not enough time periods exist which meet requirement 1, you should give only the allowed time periods.

Input

The input starts with a line containing the number of runs N. Next follows two lines for each run. The first line contains three numbers: the number of quarters (1–300), the number of requested best periods (1–100) and the minimum number of quarters Craig wants to spend spotting planes (1–300). The sec-nod line contains one number per quarter, describing for each quarter the observed number of planes. The airport can handle a maximum of 200 planes per quarter.

Output

The output contains the following results for every run: 

* A line containing the text “Result for run <N>:” where <N> is the index of the run. 

* One line for every requested period: “<F>-<L>” where <F> is first quarter and <L> is the last quarter of the period. The numbering of quarters starts at 1. The output must be ordered such that the most preferable period is at the top.

Sample Input

3
10 5 5
1 5 0 2 1 4 2 5 0 2 
10 3 5
10 3 1 4 2 6 3 0 8 0 
5 5 5
1 2 3 4 5

Sample Output

Result for run 1:
4-8
2-8
6-10
1-8
2-6
Result for run 2:
1-6
1-7
1-9
Result for run 3:
1-5
题解:第一行为测试用例个数,第二行三个数分别为quarter个数,最优解个数,最小quarter个数,接下来一行为每一个quarter的飞机架数,题目要求解出符合题中给出三个要求的最优解,即对所有可能的情况按照给出的规则进行排序,取出前面n个即可,不知道为何用快排过不了。。。代码如下,sort可以测试通过,qsort不行,谁能帮忙解答???
// Problem#: 1046
// Submission#: 2209677
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <algorithm>

using namespace std;

struct answer{
       int start;
       int end;
       double avarage;
};

/*
int compare(const void* a, const void* b){
    int num_quarters_a = (*(answer*)a).end - (*(answer*)a).start;
    int num_quarters_b = (*(answer*)b).end - (*(answer*)b).start;
    if((*(answer*)a).avarage < (*(answer*)b).avarage)
         return 1;
    else if((*(answer*)a).avarage > (*(answer*)b).avarage)
         return -1;
    else{
         if(num_quarters_a < num_quarters_b)
              return 1;
         else if(num_quarters_a > num_quarters_b)
              return -1;
         else if((*(answer*)a).end > (*(answer*)b).end)
             return 1;
         return -1;
    }
}
*/
bool compare(answer a, answer b){
     int num_quarters_a = a.end - a.start;
     int num_quarters_b = b.end - b.start;
     if(a.avarage > b.avarage)
          return true;
     else if(a.avarage < b.avarage)
          return false;
     else{
          if(num_quarters_a > num_quarters_b)
              return true;
          else if(num_quarters_a > num_quarters_b)
              return false;
          else if(a.end < b.end)
             return true;
          return false;      
     }
}

int main(){
    int case_number;
    cin>>case_number;
    int runs = 1;
    while(runs <= case_number){
         int quarters;
         int best_periods;
         int min_num_quarters;
         cin>>quarters>>best_periods>>min_num_quarters;
         int* quarters_detail = new int[quarters];
         answer answer_hold[100000]; 
         
         //int n = (quarters+2-min_num_quarters)*((quarters-min_num_quarters+1)/2);
         for(int i = 0; i < quarters; i++){
                 cin>>quarters_detail[i];
         }
         
         int hold_count = 0;
         for(int k = min_num_quarters; k <= quarters; k++){
             for(int i = 0; i <= quarters-k; i++){
                     int sum = 0;
                     for(int j = i; j < k+i; j++){
                             sum += quarters_detail[j];
                     }
                     answer_hold[hold_count].start = i+1;
                     answer_hold[hold_count].end = i+k;
                     answer_hold[hold_count].avarage = (double)sum/k;
                     hold_count++;
             }
         }
         
         sort(answer_hold,answer_hold+hold_count,compare);
         
         cout<<"Result for run "<<runs<<":"<<endl;
         
         for(int i = 0; i < best_periods && i < hold_count; i++){
                 cout<<answer_hold[i].start<<"-"<<answer_hold[i].end<<endl;
         }
         runs++;
    }
    return 0;    
}                                 

### MATLAB Robotics Toolbox 10.4 Information and Resources The **Robotics Toolbox for MATLAB (RTB)** version 10.4 is a powerful third-party toolset designed to facilitate research and development in the field of robotics[^4]. This specific version can be obtained from Peter Corke's official website by downloading `RTB10.4.mltbx`[^3]. #### Installation Process To install this toolbox, one should navigate within MATLAB to the folder containing the downloaded file `RTB10.4.mltbx`. By double-clicking on it through the directory pane on the left side of the MATLAB interface, installation proceeds automatically. #### Verification Post-Installation After completing the setup process, entering `ver` into the MATLAB command window will list all installed packages along with their versions; spotting "Robotics Toolbox for MATLAB Version 10.4" confirms successful deployment[^1]. #### Features Overview This particular iteration of RTB offers comprehensive functionalities covering essential aspects like kinematics, dynamics, trajectory planning, sensor modeling among others which are crucial for both simulation studies as well as real-world robotic applications. ```matlab % Example code snippet demonstrating how to use some basic functions provided by RTB 10.4. robot = SerialLink('dynamics', 'standard'); % Create an instance representing serial-link manipulator model using standard dynamic parameters. q = [pi()/4, pi()/2]; % Define joint angles vector q. T = robot.fkine(q); % Calculate forward kinematic transformation matrix T at given configuration q. disp(T); ``` #### Documentation & Support Materials For users seeking deeper understanding or troubleshooting assistance regarding RTB 10.4 features: - Visit the project homepage hosted by its creator Dr.Peter Corke where detailed documentation including user guides, tutorials, examples codes etc., alongside community forums dedicated specifically towards addressing issues related to usage of this software package may prove invaluable resources. --related questions-- 1. What new capabilities does RTB 10.4 introduce compared to previous releases? 2. How do I resolve common errors encountered during the installation of RTB 10.4? 3. Can you provide sample projects that effectively utilize key components offered by RTB 10.4? 4. Is there any difference between running simulations versus controlling actual robots when utilizing RTB 10.4? 5. Where can I find advanced training materials focused on mastering complex operations available within RTB 10.4?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值