思维题-POJ1852-挑战程序设计2

https://vjudge.net/problem/POJ-1852
给定一个竹竿,和一群蚂蚁,给定蚂蚁距离竹竿左端的距离。
蚂蚁的方向是未知的,速度都是1米一秒,如果相遇了他们会扭头反向走,问你最短的时间和最长的时间
1 穷竭搜索。。会超时的。
2 我发现了一个规律,但是还是一直wa。。还是没想明白怎么回事,后面我会把那个错的先交到这里,有时候在想。
1 ac代码(参考白书)

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn=1000007;
int main()
{   std::ios::sync_with_stdio(false);
    cin.tie(0);

    int t;
   int a[maxn];
   int len,n;
    cin>>t;
    while(t--)
    {   cin>>len>>n;
        for(int i=1;i<=n;i++)
        {  cin>>a[i];

        }
        int min1=-1;
        for(int i=1;i<=n;i++)
        {   min1=max(min1,min(a[i],len-a[i]));
        }
        int max1=-1;
        for(int i=1;i<=n;i++)
        {   max1=max(max1,max(a[i],len-a[i]));

        }
        cout<<min1<<" "<<max1<<endl;

    }

    return 0;
}

我的思路。

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=1000006;
int main()
{   int t;
   int len,m;
   int b[maxn];
    int a[maxn];
     scanf("%d",&t);
     while(t--)
     {   scanf("%d%d",&len,&m);
         for(int i=0;i<m;i++)
          {  scanf("%d",&a[i]);
              b[i]=abs(a[i]-len/2);
         }
         sort(a,a+m);
         sort(b,b+m);
         printf("%d ",len/2-b[0]);
         int big=len-(a[m-1]+a[0]+(a[m-1]-a[0])%2)/2+((a[m-1]-a[0])/2+(a[m-1]-a[0])%2);
         int small=(a[m-1]+a[0]+(a[m-1]-a[0])%2)/2+((a[m-1]-a[0])/2+(a[m-1]-a[0])%2);
         //cout<<((a[m-1]-a[0])/2+(a[m-1]-a[0])%2)<<endl;
         //cout<<(a[m-1]-a[0])/2+(a[m-1]-a[0])%2<<endl;
          printf("%d\n",max(big,small));
     }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值