CodeForces - 589D(暴力+模拟)
题目链接:http://codeforces.com/problemset/problem/589/D
题目大意:给出n个人行走的开始时刻,开始时间和结束时间,求每个人分别能跟多少人相遇打招呼(每两人只能打招呼一次)。
例:
输入:
3
1 1 10
5 8 2
9 9 10
输出:
2 1 1
解题思路:先按行走的开始时刻排下序,然后直接模拟判断和比他后出现的人是否可以相遇。
第一步判断前面那个人在未走完前,下一人会出现,若不出现,直接break。然后就计算当下一个人出现的时刻,前一个人的位置,然后又分种情况,两个人可能刚好在一起,有可能在他左边,也可能在他右边。刚好在一起很好,直接相遇了,若不相遇,则要判断他们是否同向,若同向,肯定不可能相遇,速度是相同的,判断是否同向,直接两个人的终点减去起点相乘是否大于0就可以,不过要注意的是:他们相乘会爆int,我就因为这个找了一个多小时才找出来,还总以为自己漏了情况。。。。反方向的话,直接计算他们的位置判断是否在他们行走的范围以内即可。
附上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
struct node{
int t; //开始行走的时刻
int s; //开始位置
int f; //结束位置
int id; //序号
}p[];
int n,cnt[];
bool comp(const node &a,const node &b)
{
return a.t<b.t;
} int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(cnt,,sizeof(cnt));
for(int i=;i<n;i++)
{
scanf("%d%d%d",&p[i].t,&p[i].s,&p[i].f);
p[i].id=i;
}
sort(p,p+n,comp); //按开始行走的时刻排序
//cout<<endl;
//for(int i=0;i<n;i++)
// cout<<p[i].t<<" "<<p[i].s<<" "<<p[i].f<<endl;
int t,pos;
for(int i=;i<n-;i++)
{
for(int j=i+;j<n;j++)
{
if(p[i].t+abs(p[i].f-p[i].s)<p[j].t) //第i个人走完了,第j个人还未出现,直接break
break;
t=p[j].t-p[i].t;
if(p[i].f>p[i].s)
pos=p[i].s+t;
else
pos=p[i].s-t; //pos为第j个人出现的时候第i个人的位置
//cout<<pos<<endl;
if(pos==p[j].s) //在j的其实位置相遇
{
cnt[p[i].id]++;
cnt[p[j].id]++;
}
else if(pos<p[j].s)
{
ll y=(ll)(p[i].f-p[i].s)*(ll)(p[j].f-p[j].s);
if(y>) //两个人同向,速度相同,追不上
continue;
if((p[i].f-p[i].s)<&&(p[j].f-p[j].s)>) //反向但是位置不对
continue;
double x=pos+(p[j].s-pos)/2.0; //相遇位置
if(x<=p[i].f&&x>=p[j].f)
{
cnt[p[i].id]++;
cnt[p[j].id]++;
//cout<<p[i].id<<" "<<p[j].id<<endl;
}
}
else
{
ll y=(ll)(p[i].f-p[i].s)*(ll)(p[j].f-p[j].s);
if(y>)
continue;
if((p[i].f-p[i].s)>&&(p[j].f-p[j].s)<)
continue;
double x=pos-(pos-p[j].s)/2.0;
if(x<=p[j].f&&x>=p[i].f)
{
cnt[p[i].id]++;
cnt[p[j].id]++;
//cout<<p[i].id<<" "<<p[j].id<<endl;
}
} }
}
printf("%d",cnt[]);
for(int i=;i<n;i++)
printf(" %d",cnt[i]);
printf("\n");
}
return ;
}
CodeForces - 589D(暴力+模拟)的更多相关文章
- Vicious Keyboard CodeForces - 801A (暴力+模拟)
题目链接 题意: 给定一个字符串,最多更改一个字符,问最多可以有多少个“VK”子串? 思路: 由于数据量很小,不妨尝试暴力写.首先算出不更改任何字符的情况下有多个VK字串,然后尝试每一次更改一个位置的 ...
- codeforces 591B Rebranding (模拟)
Rebranding Problem Description The name of one small but proud corporation consists of n lowercase E ...
- bnuoj 20832 Calculating Yuan Fen(暴力模拟)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=20832 [题意]: 给你一串字符串,求一个ST(0<ST<=10000),对字符串中字符 ...
- POJ 1013 小水题 暴力模拟
Counterfeit Dollar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35774 Accepted: 11 ...
- hdu_1006 Tick and Tick(暴力模拟)
hdu1006 标签(空格分隔): 暴力枚举 好久没有打题了,退队了有好几个月了,从心底不依赖那个人了,原来以为的爱情戏原来都只是我的独角戏.之前的我有时候好希望有个人出现,告诉自己去哪里,做什么,哪 ...
- hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B
P2 : Heshen's Account Book Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description H ...
- 美团2018年CodeM大赛-资格赛 分数 暴力模拟
链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...
- 2018/7/31-zznu-oj-问题 B: N! 普拉斯 -【求大数的阶乘-ll存不下-然后取尾零的个数输出-暴力模拟】
问题 B: N! 普拉斯 时间限制: 1 Sec 内存限制: 128 MB提交: 114 解决: 35[提交] [状态] [讨论版] [命题人:admin] 题目描述 在处理阶乘时也需要借助计算器 ...
- 2018/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】
问题 A: A + B 普拉斯 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下: 现在我们用01来构成这些数字 当宝儿姐输入A + B 时(log10(A)<50,log10 ...
- what the fuck!(二分查找 / 暴力模拟)
what the fuck! Description 现在有一家公司有nnn个员工(nnn为奇数),他们的工资发放是基本工资+提成,现在这家公司计划再招一批人.要写一篇招聘启事,但是对于这个招聘启事中 ...
随机推荐
- 使用fetch代替ajax请求 post传递方式
let postData = {a:'b'}; fetch('http://data.xxx.com/Admin/Login/login', { method: 'POST', mode: 'cors ...
- 4 HttpServletResponse 与 HttpServletRequest
Web 服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest 和 HttpServletReponse 对象,response用于向客户端发送数据,request用于 ...
- IDEA 各版本在线激活(激活码)
lan yu 大佬的授权又被封杀了,还好我收藏了一些其他的服务器地址. 在线授权服务器 https://jetlicense.nss.im/ 授权代码 K03CHKJCFT-eyJsaWNlbnNlS ...
- zTree树形菜单使用实例
在每个节点添加 id 和 pid, id 表示当前节点编号,pid 表示父节点编号 第一步:在页面显示菜单位置,添加 ul设置 class=”ztree” 第二步:开启简单数据格式支持 第三步:编写树 ...
- JS中的<a>标签
<a>标签可定义锚.一个锚有两种用法: 通过使用 href 属性,创建一个到另外一个文档的链接 通过使用 name 或 id 属性,创建一个文档内部的书签 如果是在 HTML 5 中,它定 ...
- 你不知道的JavaScript——第一章:作用域是什么?
编译原理 JavaScript事实上是一门编译语言,但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植. 任何JavaScript代码片段在执行前都要进行编译(通常就在执行 ...
- Django--CRM--modelformset的用法
一 . modelformset用法 其实和modelform方法差不多,只不过是显示的时候可以直接修改,显示的select的那种模式 from django.forms import modelfo ...
- Java多线程4:Thread中的静态方法
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...
- SLAs-笔记
类型 sla status determined at time intervals over a timeline: average transaction response time errors ...
- LoadRunner Vuser测试脚本添加前置条件举例
调用接口前需要先获取登陆token,放入消息头中. /* * LoadRunner Java script. (Build: 3020) * * Script Description: 接口性能测试脚 ...