codeforce 589 D. Boulevard

原创 2015年11月18日 17:01:18

暴力搜索,对于第 i 个人,判断所有第 j ( j=i+1,……,n) 个人是否能与其相遇,如果能相遇,则第 i 和第 j 个人的相遇人数都要加 1 .

首先要对 第 i 和第 j 个人的起始位置进行判断,如果谁进入道路的时间早,就走到 晚进入道路的那个人 进入道路的时间点;

此时再对这两个人剩余的路途进行判断,如果两个人中谁的剩余的路途为负数了,说明在另一个人还没上路之前这个人就已经到达终点了,则两个人必然不能相遇,继续判断下一个人

如果此时两人的起始位置相同,说明两个人一上路就碰到了,此时两个人的人数都要加 1

除了起始位置相同外,两个人想要相遇只有一种可能,那就是相向而行,而且两人剩余的路途必然要大于等于两个人之间距离的一半,如果谁的剩余的路途小于一半,说明这个人先走完了,而另一个还在走

代码如下:

#include <iostream>
#include <vector>
using namespace std;
struct node
{
	int t;
	int s;
	int f;
	int d; //保存方向 
};
int main() 
{
	int n,i,j,pos1,pos2;
	double t,t1,t2;
	cin>>n;
	vector<int> re(n); //存放结果 
	vector<node> vec(n);
	for(i=0;i<n;++i)
	{
		cin>>vec[i].t>>vec[i].s>>vec[i].f;
		vec[i].d=(vec[i].s<vec[i].f?1:-1);// 目的地大于其实地,向右走方向为 1,否则为 -1 
	}
	for(i=0;i<n;++i)
	{
		for(j=i+1;j<n;++j)
		{
			pos1 = vec[i].s;
			pos2 = vec[j].s;
			if(vec[i].t<vec[j].t) //如果第 j 个人后上路,则第 i 个人走到 j 上路的时间 
				pos1 = (vec[j].t-vec[i].t)*vec[i].d+vec[i].s;
			else if(vec[i].t>vec[j].t) //如果第 i 个人后上路,则第 j 个人走到 i 上路的时间
				pos2 = (vec[i].t-vec[j].t)*vec[j].d+vec[j].s;			
			t1 = vec[i].f-pos1; // 第 i 个人还剩下多少路程 
			t1 *= vec[i].d;
			t2 = vec[j].f-pos2;  // 第 j 个人还剩下多少路程 
			t2 *= vec[j].d;
			if(t2<0||t1<0) //任何人剩余路程为负数,说明此人在另一个人还没上路前就已经走完 
				continue;
			if(pos1==pos2)  // 起始位置相等,必然相遇 
				re[i]+=1,re[j]+=1;
			else if((pos1<pos2&&vec[i].d==1&&vec[j].d==-1)||(pos1>pos2&&vec[i].d==-1&&vec[j].d==1))
			{ // 相向而行的条件,要么 i 在 j 的左边且 i 向右走 j 向左走;要么 j 在 i 的左边且 j向右走 i 向左走
				t = abs(pos2-pos1);  //两个人之间总的剩余路程 
				t /= 2;
				if(t1>=t&&t2>=t)  // 必须每人至少走一半 
					re[i]+=1,re[j]+=1;
			}
		}
	}
	for(i=0;i<n;++i)
		cout<<re[i]<<" ";
	return 0;
}


版权声明:本文为博主原创文章,欢迎大家转载,我们都是相互学习,共同进步。

CodeForces #589 D Boulevard 模拟

题目描述:Description Welcoming autumn evening is the best for walking along the boulevard and n people ...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年05月22日 18:30
  • 291

Codeforces Beta Round #93 (Div. 1 Only) D. Fibonacci Sums

首先把一个
  • u012287002
  • u012287002
  • 2014年09月03日 00:24
  • 399

codeforces 4D D. Mysterious Present(dp)

题目连接:codeforces 4D题目大意:给出n个信封,这n个信封有长和宽,给出卡片的尺寸,求取能够装入卡片的最长的序列,序列满足后一个的长和宽一定大于前一个,求最长的这个序列的长度,并且给出一组...
  • qq_24451605
  • qq_24451605
  • 2015年09月15日 10:14
  • 965

Codeforces 8D Two Friends 三分+二分+计算几何

题目链接:点击打开链接 题意:点击打开链接 三分house到shop的距离,二分这条斜边到cinema的距离 #include #include #include #include #i...
  • qq574857122
  • qq574857122
  • 2014年06月25日 00:07
  • 1316

Codeforces Round #460 (Div. 2) D. Substring(拓扑排序)

题目链接题意:有一个n个点m条边的有向图,每个节点有一个字母,路径的权值是路径上相同字母的最大个数。求最大的路径权值。思路:因为只有26个字母,所以直接假设其中一个字母为相同字母数最大的字母。枚举每一...
  • cyf199775
  • cyf199775
  • 2018年02月01日 13:55
  • 38

Codeforces Round #454 (Div. 2, based on Technocup 2018 Elimination Round 4) C - Shockers

如果在!中没有出现过,那么这些字母没有嫌疑,如果在?或.中出现过,那么这些字母没有嫌疑。当最后只剩一个字母有嫌疑时,就确定了假设的字母,这时候我们只需要判别之后出现的?和!的数目即可。#include...
  • Myriad_Dreamin
  • Myriad_Dreamin
  • 2017年12月24日 01:58
  • 61

codeforces 486D D. Valid Sets(树形dp)

题目链接:codeforces 486D题目大意:给出一棵树,求这棵树的满足最大点与最小点之差小于d的连通子图的个数。题目分析: 因为涉及到图中的最大点和最小点,所以我们先枚举一个点作为最大点,然后搜...
  • qq_24451605
  • qq_24451605
  • 2015年10月06日 19:01
  • 833

CodeForces - 899D Shovel Sale 数学+思维

CodeForces - 899D Shovel Sale 数学+思维 题意:给你1,2,...,n,现在要求取出一对数相加为x。x需要满足:以最多个9结尾。现在给你n,求这样的数对有几个。 *例如...
  • weixin_36571742
  • weixin_36571742
  • 2017年12月18日 20:51
  • 159

Codeforces 899D - Shovel Sale 【思维】

Codeforces 899D - Shovel Sale 【思维】 There are n shovels in Polycarp's shop. The i-th shovel costs i b...
  • my_sunshine26
  • my_sunshine26
  • 2017年12月17日 16:50
  • 341

codeforces 449D Jzzhu and Numbers 容斥+DP

很有意思的一题,题目大意
  • ACMmaxx
  • ACMmaxx
  • 2014年07月24日 12:55
  • 1300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforce 589 D. Boulevard
举报原因:
原因补充:

(最多只允许输入30个字)