uva--10714+找规律

题意:

一根长度为len的木棍上有n只蚂蚁,蚂蚁们都以1cm/s的速度爬行;如果一只蚂蚁爬到了木棍的端点,那么他就会掉下去;如果两只蚂蚁碰到一起了,他们就会掉头往相反方向爬行。输入len和n只蚂蚁的初始位置(以左端点为原点),问:所有蚂蚁都掉下木棍的最短时间和最长时间(蚂蚁初始爬行方向是不定的)。

思路:

最短时间是很显然的,只要靠近左端点的蚂蚁都往左端点爬,靠近右端点的蚂蚁都往右端点爬,时间就能最短;最短时间是所有蚂蚁离他较近端点距离的最大值。

对于最长时间我实在是没想到,后面看样例的时候发现最长时间都是蚂蚁距离端点长的最大值,然后按照这个思路

写了代码,然后就过了。。。。。。。

后面看了别人的思路才知道因为蚂蚁的速率是恒定的,所以碰头转向完全可以不考虑(假设A,B碰头转向了,我只需把B看成A,A看成B就可以当他们没有掉过头了);这样的话,问题就变成求蚂蚁距离端点长度的最大值了,所以我上面的思路就是对的了。

其实如果考虑转向的话,也可以列出1,2,3只蚂蚁的情况进行一下观察,然后也可以得到规律了。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

int a[1100000];

int main()
{
     int i,j,t,len,n,min1,max1;
     scanf("%d",&t);
     while(t--)
     {
            scanf("%d%d",&len,&n);
            for(i=0;i<n;i++)
                scanf("%d",&a[i]);
            min1=0; max1=0;
            for(i=0;i<n;i++)
            {
                  if(a[i]<len/2)
                        min1=max(a[i],min1);
                  else
                       min1=max(len-a[i],min1);
                  max1=max(max1,a[i]);
                  max1=max(len-a[i],max1);
            }
            printf("%d %d\n",min1,max1);
     }
 return 0;
}
时间: 2024-12-14 18:18:42

uva--10714+找规律的相关文章

uva 10479(找规律+递归)

题意:有一个初始序列第一个数字是0, 规律是把前一次推出来的每一个数字x,先接x个0,然后接x+1. 0 –> 1 –> 02 –> 1003 –> 02110004 那么这个序列就变成0,1,0,2,1,0,0,3,0,2,1,1,0,0,0,4- 问序列里第n个数字是多少,0 < n < 2^63. 题解:首先可以看出这个序列的第2^k个数字一定是k,然后从第2^k个数字往前看一定是紧接着k-1个0,k-2个1 ,k-3个02,k-4个1003-,一直到k-i为1,

UVA 1363 Joseph&#39;s Problem 找规律+推导 给定n,k;求k%[1,n]的和。

/** 题目:Joseph's Problem 链接:https://vjudge.net/problem/UVA-1363 题意:给定n,k;求k%[1,n]的和. 思路: 没想出来,看了lrj的想法才明白. 我一开始往素数筛那种类似做法想. 想k%[1,n]的结果会有很多重复的,来想办法优化. 但没走通. 果然要往深处想. 通过观察数据发现有等差数列.直接观察很难确定具体规律:此处应该想到用式子往这个方向推导试一试. lrj想法: 设:p = k/i; 则:k%i = k-i*p; 容易想到

(白书训练计划)UVa 12627 Erratic Expansion(递归+找规律)

题目地址:UVa 12627 这题是先找规律,规律在于对于第k个小时的来说,总是可以分成右下角全是蓝色气球,右上角,左下角与左上角三个一模一样的k-1个小时的气球.这样的话,规律就很清晰了,然后用递归做比较方便... 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <ma

UVA - 11384 - Help is needed for Dexter (找规律!!)

UVA - 11384 Help is needed for Dexter Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem H Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided to keep Dee Dee b

递推+高精度+找规律 UVA 10254 The Priest Mathematician

题目传送门 1 /* 2 题意:汉诺塔问题变形,多了第四个盘子可以放前k个塔,然后n-k个是经典的汉诺塔问题,问最少操作次数 3 递推+高精度+找规律:f[k]表示前k放在第四个盘子,g[n-k]表示经典三个盘子,2 ^ (n - k) - 1 4 所以f[n] = min (f[k] * 2 + g[n-k]),n<=10000,所要要用高精度,另外打表能看出规律 5 */ 6 /************************************************ 7 * Auth

【UVA】11040 - Add bricks in the wall(找规律)

一道找规律的题,可以看出,大的三角形可以划分成好多个三层的三角形: [x] [a][x-a] [y] [    ][z] 这里面xyz都已知,所以可以求出a = (x + y - z ) /2 14043615 11040 Add bricks in the wall Accepted C++ 0.019 2014-08-15 06:02:50 #include<cstdio> #include<cstring> #include<iostream> #include&

UVA - 1646 - Edge Case(找规律)

题意:n(3 <= n <= 10000)个结点组成一个圈,求匹配(即没有公共点的边集)的个数. 找规律为斐波那契的性质,因为数太大所以用的java大数. import java.math.BigInteger; import java.util.Scanner; public class Main{ public static int MAXN = 10000 + 10; public static BigInteger []c = new BigInteger[MAXN]; public

The Cow Lineup_找规律

Description Farmer John's N cows (1 <= N <= 100,000) are lined up in a row.Each cow is labeled with a number in the range 1...K (1 <= K <=10,000) identifying her breed. For example, a line of 14 cows might have these breeds: 1 5 3 2 5 1 3 4 4

【55测试】【字符串】【栈】【找规律】

集训第二天,额,考崩了. 第一题 hao 大意:(这个名字就不要在意了,其实是祖玛游戏) 模拟祖玛游戏的模式,给一个'A'~'Z'的字符串,然后有t个插入操作为 “ 添加后的在原字符串的位置 x  插入元素 c ”,字符串中有超过或等于 3 个相同的字符,则被消除,输出每次操作后剩余的字符串,如果为空,则输出“-”. 样例: ACCBA                     输出:  ABCCBA 5   AABCCBA 1 B AABBCCBA 0 A - 2 B A 4 C 0 A 解:

2016(胡赛复现)_大数找规律

Time Limit: 5 Sec  Memory Limit: 128 MB Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m;  2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤109). Output 对于每组数据,输出一个整数表示满足条件的数量. Sample Input 32 63 2016 2016 1000000000 1000