10714 - Ants(贪心)

题目:10714 - Ants

题目大意:一个长度为l的板上,分布着许多的蚂蚁,每只蚂蚁的位置都会给出但是方向不缺定,如果两只蚂蚁碰上了,就会朝各自相反的方向前进。问这样所有的蚂蚁都跌落木板的最短时间和最长时间。

解题思路:最短时间的话就是每只蚂蚁都朝着各自离两端最近的方向前进,最后取这些最近的位置的最大值,就是最短时间。这样的话两只蚂蚁是不会碰到的,因为某只蚂蚁的前方那只蚂蚁要么和这只同向,要么反向;后面的蚂蚁也是一样的情况。所以不会碰到。

最长的时间的话,其实就是离两端的其中一端最远的那只蚂蚁花费的时间。这里虽说两只蚂蚁可能会碰到,但是两只蚂蚁碰到的话就朝着相反的方向前进,这样的话就相当与和它碰头的那只蚂蚁帮它走完它本来要走的路,相当于接力。(可以会经历这样的接力很多次,但是最终还是走了离两端最远的那只蚂蚁要走的距离,只是接力的走完)。

代码:

#include <stdio.h>

const int N = 1000005;
int s[N];

int max (const int x, const int y) {

	return x > y ? x : y;
}

int min (const int x, const int y) {

	return x < y ? x: y;
}

int main () {

	int t;
	int l, n;
	scanf ("%d", &t);
	while (t--) {

		scanf ("%d%d", &l, &n);
		for (int i = 0; i < n; i++)
			scanf ("%d", &s[i]);

		int minlen, maxlen;
		minlen = maxlen = -1;

		for (int i = 0; i < n; i++) {

			minlen = max (minlen, min (s[i], l - s[i]));
			maxlen = max (maxlen, max (s[i], l - s[i]));
		}
		printf ("%d %d\n", minlen, maxlen);
	}

	return 0;
}

10714 - Ants(贪心)

时间: 2024-11-05 22:56:24

10714 - Ants(贪心)的相关文章

UVA - 10714 Ants

最多时间就是每只蚂蚁选择最久的爬行方式 最少时间就是每只蚂蚁选择最快地爬行方式 #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<vector> #include&

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

POJ 1852 Ants (思维技巧 + 贪心)

Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10639   Accepted: 4718 Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it imm

Educational Codeforces Round 7 E. Ants in Leaves(DFS+贪心)

题目链接:点击打开链接 题意:给出一棵n个结点的树, 每个叶子结点上有一只蚂蚁, 每秒每只蚂蚁可以向相邻结点走一步, 同一时刻同一结点上只能有最多一只蚂蚁(根结点除外),根结点为1, 求所有蚂蚁都移动到1上的最小花费时间. 思路:很容易想到,采取贪心的思路就行了, 那么只要不断向上走就行了, 因为根结点比较特殊, 我们只考虑它的子树, 对于它的每一棵子树, 先dfs处理出所有结点的深度,然后对深度排序,  那么计算每个叶子结点到达根结点的时间.  假设第i个蚂蚁到达根结点的时间等于a[i],那么

poj 1852 Ants(贪心)

Ants Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14061   Accepted: 6134 Description An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it imm

五大常用算法:分治、动态规划、贪心、回溯和分支界定

苹果的WWDC ,除了发布了os x 10.10 和IOS8 外,还推出了Swift.详细点击这里 代码总体风格有点像Java,也有点像javascript. 下面给出一些代码段(来自苹果官方手册): println("Hello, world") "var myVariable = 42 myVariable = 50 let myConstant = 42" 摘录来自: Apple Inc. "The Swift Programming Languag

POJ 1852 Ants 分析

1.暴搜 每只蚂蚁朝向有两种,可以枚举n只蚂蚁的朝向,然后模拟蚂蚁相遇的情景,总共2^n中情况. 2.分析ants相碰的情况: (a->)  (<-b) 变成 (<-a)(b->) 由于每只蚂蚁是相同的,所以等价与(<-b)(a->),这和两只蚂蚁原来的走向是一样的,即把碰撞当作没发生过 所以可以对每一只蚂蚁检查一次就可以了 3.空间优化 存蚂蚁的初始位置O(n),但是我们每次只要比较 a[i] 和 len-a[i] 就可以了,后面不需要这两个值了,所以完全可以用一个x

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家

[题目大意] 有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度.每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值.每种牧草只会被一头牛选择.问最少要多少钱? [思路] 显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继. 不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下…… 1 #include<iostream> 2 #include<cstdio&