新龟兔赛跑

允我心安 提交于 2020-01-03 08:51:03

Description

大家还记得龟兔赛跑的故事吗?兔子输给了乌龟,但是他一直都不服气,想要一雪前耻。他把他的族人全部都带来了海边,要与乌龟一族一比高下。嚣张的兔子们,给了乌龟一个月的时间来准备这场”世纪大战。如临大敌的乌龟们每天没日没夜的锻炼,在高帅富Bearboy的帮助下,乌龟的速度再也不是以前那样了,完全有能力和兔子抗衡。为了比赛的结果更权威,这次兔子提出,要N只兔子和N只乌龟在同一条跑道上同时进行比赛。

嚣张的兔子让乌龟们自己在跑道上选择自己起跑的起点(不一定是跑道的0点),同时让乌龟为这N只兔子规定他们的起点。跑道长度保证所有的超越都可以完成,比赛积分计算如下:

       1:x只乌龟同时超过一只兔子   乌龟一族 加x 分

       2:x只兔子同时超过一只乌龟   兔子一族 加x分

       3:x只乌龟同时超过y只兔子   乌龟一族 加x*y分

       4:x只兔子同时超过y只乌龟   兔子一族 加x*y分

问最后谁的分最高。

Input

输入有多组测试数据。每组测试数据第一行是一个整数N(1<=N<=100000),表示兔子和乌龟的数量(都为N)。接下来有2*N行数据,每行有两个数字Si , Vi(Si表示第i只乌龟/兔子的初始位置(跑道起点为0),Vi(1<=Vi<=100000)表示第i只乌龟/兔子的匀速前行的速度)第2行到N+1行是N只兔子的信息,第N+2行到2*N+1行是N只乌龟的信息。(所有的Si互不相等)

Output

输出乌龟所得的分数(由于结果会很大,所以结果对2012取余数)

Sample Input

33 57 68 21 72 65 824 25 23 42 4

Sample Output

7
4

这个题有点逆序数的意思,由于本题求的是乌龟的分数,所以我们可以求每只兔子为乌龟贡献了多少分,即我们只看乌龟超越兔子的情况。如果一只乌龟在一只兔子后面并且乌龟速度大于兔子速度,则这只乌龟肯定会超越这只兔子。我们累加求和就行。由于这个题的数据太水了,我们暴力就可以解决

#include <iostream>
#include <stdio.h>
using namespace std;
struct node
{
    int s,v;
};

int main()
{
    int N;
    while(cin>>N)
    {
        node rabbit[100000];
        node tortoise[100000];
        for(int i=0;i<N;i++)
            scanf("%d%d",&rabbit[i].s,&rabbit[i].v);
        for(int i=0;i<N;i++)
            scanf("%d%d",&tortoise[i].s,&tortoise[i].v);
        int sum=0;
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
              if(rabbit[i].s>tortoise[j].s)
                 if(rabbit[i].v<tortoise[j].v)
                   sum=(sum%2012+1)%2012;
        cout<<sum%2012<<endl;
    }
    return 0;
}





   
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!