Codeforces Beta Round #63 (Div. 2)

来源:互联网 发布:网件的访客网络 编辑:程序博客网 时间:2024/06/13 13:01

题目叙述:

In Chelyabinsk lives a much respected businessman Nikita with a strange nickname "Boss". Once Nikita decided to go with his friend Alex to the Summer Biathlon World Cup. Nikita, as a very important person, received a token which allows to place bets on each section no more than on one competitor.

To begin with friends learned the rules: in the race there are n sections of equal length and m participants. The participants numbered from1 to m. About each participant the following is known:

  • li — the number of the starting section,
  • ri — the number of the finishing section (li ≤ ri),
  • ti — the time a biathlete needs to complete an section of the path,
  • ci — the profit in roubles. If thei-th sportsman wins on one of the sections, the profit will be given to the man who had placed a bet on that sportsman.

The i-th biathlete passes the sections fromli tori inclusive. The competitor runs the whole way in(ri - li + 1)·ti time units. It takes him exactlyti time units to pass each section. In case of the athlete's victory onk sections the man who has betted on him receivesk·ci roubles.

In each section the winner is determined independently as follows: if there is at least one biathlete running this in this section, then among all of them the winner is the one who has ran this section in minimum time (spent minimum time passing this section). In case of equality of times the athlete with the smaller index number wins. If there are no participants in this section, then the winner in this section in not determined. We have to say that in the summer biathlon all the participants are moving at a constant speed.

We should also add that Nikita can bet on each section and on any contestant running in this section.

Help the friends find the maximum possible profit.

此题易于理解:


解题思路:

水题,思路直接看代码:


我的代码:


#include<iostream>using namespace std;int main(){    int n,m;    int a[105]={0};         //下标代表每一个选手,a代表起始    int b[105]={0};         //b代表终止    int c[105]={10000};     //c代表时间    int d[105]={0};         //d代表赌注    int _min=0;             //找到最小的时间。    int sum=0;    int flag=1;             //判断某一段是否没有选手    cin>>n>>m;    for(int i=1;i<=m;i++)    {        cin>>a[i]>>b[i]>>c[i]>>d[i];    }    for(int i=1;i<=n;i++)           //每一段    {        for(int j=1;j<=m;j++)       //每一位选手        //for(int j=1;i>=a[j]&&i<=b[j]&&j<=m;j++) //这样的判定条件是错误的,当二选手不满足条件时,三四选手不参与到循环        {            if(i>=a[j]&&i<=b[j])            {                if(c[_min]>c[j]) //c[_min]的起始值必须比所有值都大。                {                    _min=j;                }                flag=0;            }        }        if(flag)    _min=0;        sum+=d[_min];        _min=0;        flag=1;    }    cout<<sum<<endl;    return 0;}

0 0
原创粉丝点击