POJ1852 Ants

因为很久没有想题目了,所以开始复健,把买的算法书,想要刷一遍复习一下。(估计写不完,苦涩)
《挑战程序设计竞赛》和紫书等算法书的习题可以参考vj上的:挑战ICPC编程 https://vjudge.net/group/challenge
本题题面:
在一根给定长度的棍子上有n只蚂蚁,给定他们的位子,不告诉行走的方向。如果两只蚂蚁相撞就会各自转向。蚂蚁每单位时间走1,当它们走到棍子两端的时候,就会掉下去。问它们掉下去的最早和最晚时间。
想法:
就是思维题。最简单的情况:如果只有一只蚂蚁/如果不考虑相撞,两个时间无非就是往左走和往右走的时间。现在有相撞转向,但是想一下他俩相撞时是同一个时间点,那么即使他们转向了,再相加的时间也是各自原来不转向的时间。所以其实就是回到不考虑相撞的情况下写。所以只要考虑每只蚂蚁掉下去的短的时间和长的时间,然后短的时间取最大值就是总的最短时间,长的时间取最大值就是总的最长时间。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int t;
int pos;
int maxt,mint;
int len,n;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&len,&n);
        maxt=-0x3f3f3f3f;
        mint=maxt;
        for(int i=0;i<n;++i){
            scanf("%d",&pos);
            int lt=pos;
            int rt=len-pos;
            maxt=max(maxt,max(lt,rt));
            mint=max(mint,min(lt,rt));
        }
        printf("%d %d\n",mint,maxt);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值