hdu 3744 A Runing Game

本文介绍了一道编程题,题目要求根据运动员在赛道上的位置和给出的排名列表来判断该排名是否合理。通过算法分析,文章提供了一个解决方案,并详细解释了其工作原理。

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

## A Runing Game ##
A Runing Game

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 917 Accepted Submission(s): 412

Problem Description
HDU hosts sporting meeting every year. One of the most exciting events is the 10000M-running.During the match many students are running on the track. So, how about the rank list now?

As we know, in a running , we rank the player according to the length everyone has passed . So if one player run 400M(one lap) farther than another player , it looks like they are running at the same position on the track , but the rank of the former is much better than the latter. Now given everyone’s position on the track , and one rank list , can you tell me whether the rank list is possible.

Input
The first line of input gives the number of cases, T (at most 110). the first line of each case has two intergers, n,m. (1 <= n <= 100,1 <= m <= 40000,n <= m),represents there’re n players in the m-meter running.
then n lines describe every player.

Each line have two intergers , Xi , Ri .Representing the i-th player is running at xi[0 , 399] meter in his recent lap, and ranks Ri in the ranklist .And the data make sure that no pair of the students have the same Xi or Ri. And the start point is at 0 in their first lap.

Output
If the rank list is possible, output “YES” ,output “NO” otherwise.

Sample Input
2
3 400
100 1
49 2
28 3
3 800
100 1
150 2
154 3

Sample Output
YES
NO

题目大意:T组数据,每组数据有参赛人数n和要跑多少米m的长度,然后n行两个数据a,b。a代表这个人距离起点的位置,b代表这个人的名次,问你这个名次有没有可能。

想法:创建一个数组,用下标表示名次,这样就可以省去排序的时间。如果前一名的位置在后一名的位置的前面,如果要排名是成立的,那么两个人可以在同一圈,就把这个人的位置加上他跑的最大圈数。如果前一名的位置在后一名的位置的后面,如果要排名成立,那么前一名一定要比后一名多跑一圈。所以前一名的跑步长度要比后一名的跑步长度多一圈,最后判断是不是所有的前一名跑步的长度都要比后一名的要长。

#include<bits/stdc++.h>
using namespace std;
int a[101];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(a,0,sizeof(a));
        int n,m;
        cin>>n>>m;
        int x,y;
        for(int i=0;i<n;i++)
        {
            cin>>x>>y;
            a[y]=x;
        }
        int q=m/400,r=m%400;
        if(a[1]<=r)
        {
            a[1]=a[1]+q*400;
        }
        else
        {
            a[1]=a[1]+(q-1)*400;
            q--;
        }
        for(int i=2;i<=n;i++)
        {
            if((a[i]+q*400)<a[i-1])
            {
            //    q--;
                if(q<0)
                q=0;
                a[i]=a[i]+q*400;

            }
            else
            {
                q--;
                if(q<=0)
                q=0;
                a[i]=a[i]+q*400;
            }
        }
        int flag=0;
        for(int i=2;i<=n;i++)
        {
            if(a[i-1]>a[i])
            continue;
            else
            {
                cout<<"NO"<<endl;
                flag=1;
                break;
            }
        }
        if(flag==0)
        cout<<"YES"<<endl;
    }
    return 0;
}

代码提交地址:http://acm.hdu.edu.cn/showproblem.php?pid=3744

资源下载链接为: https://pan.quark.cn/s/790f7ffa6527 在一维运动场景中,小车从初始位置 x=-100 出发,目标是到达 x=0 的位置,位置坐标 x 作为受控对象,通过增量式 PID 控制算法调节小车的运动状态。 系统采用的位置迭代公式为 x (k)=x (k-1)+v (k-1) dt,其中 dt 为仿真过程中的恒定时间间隔,因此速度 v 成为主要的调节量。通过调节速度参数,实现对小车位置的精确控制,最终生成位置 - 时间曲线的仿真结果。 在参数调节实验中,比例调节系数 Kp 的影响十分显著。从仿真曲线可以清晰观察到,当增大 Kp 值时,系统的响应速度明显加快,小车能够更快地收敛到目标位置,缩短了稳定时间。这表明比例调节在加快系统响应方面发挥着关键作用,适当增大比例系数可有效提升系统的动态性能。 积分调节系数 Ki 的调节则呈现出不同的特性。实验数据显示,当增大 Ki 值时,系统运动过程中的波动幅度明显增大,位置曲线出现更剧烈的震荡。但与此同时,小车位置的变化速率也有所提高,在动态调整过程中能够更快地接近目标值。这说明积分调节虽然会增加系统的波动性,但对加快位置变化过程具有积极作用。 通过一系列参数调试实验,清晰展现了比例系数和积分系数在增量式 PID 控制系统中的不同影响规律,为优化控制效果提供了直观的参考依据。合理匹配 Kp 和 Ki 参数,能够在保证系统稳定性的同时,兼顾响应速度和调节精度,实现小车位置的高效控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值