codeforces 848B Rooter's Song
正解:排序+模拟。
我们注意到两个点碰撞的必要条件,$pi+tj=pj+ti$,移项以后发现就是$pi-ti=pj-tj$,那么我们可以把$p-t$相同的点分为同一组。
然后我们还可以发现一点,就是无论两个点怎样碰撞,原来被覆盖的路径都是不会改变的。然后我们再观察一下样例的那张图。

可以发现,一个点最后是横向还是纵向与它碰撞的横向点和纵向点的数量大小关系有关。
以一个纵向点为例,如果与它一组的横坐标在它后面的纵向点数量$>=$所有和它一组的横向点数量,那么它就会变成横向点,否则就会变成一个纵向点。
于是我们对于每一个组按照横坐标和纵坐标来排序,就可以直接根据上述条件来判断一个点最终的位置,具体细节可以看一下代码。
#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define mp make_pair
#define x first
#define y second
#define N (200005) using namespace std; vector<pair<int,int> >vec[][N];
pair<int,int> ans[N]; int n,w,h; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-,ch=getchar();
return q*x;
} int main(){
#ifndef ONLINE_JUDGE
freopen("song.in","r",stdin);
freopen("song.out","w",stdout);
#endif
n=gi(),w=gi(),h=gi();
for (RG int i=,op,p,t;i<=n;++i){
op=gi()-,p=gi(),t=gi();
vec[op][p-t+].push_back(make_pair(p,i));
}
for (RG int i=,sz1,sz2;i<=;++i){
sort(vec[][i].begin(),vec[][i].end());
sort(vec[][i].begin(),vec[][i].end());
sz1=vec[][i].size(),sz2=vec[][i].size();
for (RG int j=;j<sz1;++j)
if (sz1-j->=sz2) ans[vec[][i][j].y]=mp(vec[][i][j+sz2].x,h);
else ans[vec[][i][j].y]=mp(w,vec[][i][sz1-j-].x);
for (RG int j=;j<sz2;++j)
if (sz2-j->=sz1) ans[vec[][i][j].y]=mp(w,vec[][i][j+sz1].x);
else ans[vec[][i][j].y]=mp(vec[][i][sz2-j-].x,h);
}
for (RG int i=;i<=n;++i) printf("%d %d\n",ans[i].x,ans[i].y); return ;
}
codeforces 848B Rooter's Song的更多相关文章
- codeforces 848B Rooter's Song 思维题
http://codeforces.com/problemset/problem/848/B 给定一个二维坐标系,点从横轴或纵轴垂直于发射的坐标轴射入(0,0)-(w,h)的矩形空间.给出点发射的坐标 ...
- Codeforces 848B Rooter's Song(分类+模拟)
题目链接 Rooter's Song 题意 有n个舞者站在x轴上或y轴上,每个人有不同的出发时间.x轴上的舞者垂直x轴正方向移动,y轴上的舞者垂直y轴正方向移动. 当x轴的舞者和y轴的舞者相遇时,他 ...
- codeforces 848B - Rooter's Song(构造+几何)
原题链接:http://codeforces.com/problemset/problem/848/B 题意:好多个人分别从x,y轴不同位置不同时间往垂直坐标轴方向移动,一旦相遇他们转向,问所有人的到 ...
- [CodeForces - 848B] Rooter's Song 思维 找规律
大致题意: 有一个W*H的长方形,有n个人,分别站在X轴或Y轴,并沿直线向对面走,第i个人在ti的时刻出发,如果第i个人与第j个人相撞了 那么则交换两个人的运动方向,直到走到长方形边界停止,问最后每个 ...
- Codeforces 849D.Rooter's Song
D. Rooter's Song time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 【Codeforces】849D. Rooter's Song
[算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...
- 【推导】【分类讨论】Codeforces Round #431 (Div. 1) B. Rooter's Song
给你一个这样的图,那些点是舞者,他们每个人会在原地待ti时间之后,以每秒1m的速度向前移动,到边界以后停止.只不过有时候会碰撞,碰撞之后的转向是这样哒: 让你输出每个人的停止位置坐标. ①将x轴上初始 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
随机推荐
- 【eclipse安装黑色主题】
eclipse Luna Service Release 2 (4.4.2)版本的自带了黑色的主题,切换下即可: 切换主题以后还需要修改下字体的主题: http://www.eclipsecolort ...
- B/S结构中页面间的传值
常见的页面间的传值有session,cookie,application,server.transfer(),queryString,今天主要记录一下server.transfer()的用法. 从A页 ...
- [转] 多种方法查看Oracle SQL执行计划
本文转自:http://falchion.iteye.com/blog/616234 一.在线查看执行计划表 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/u ...
- List和Queue使用过程中的纪录
业务需求: 发送特定的请求,根据返回的信息执行特定的事件. 目前的做法:把我的请求放入一个容器内,然后待到某一条件,就从这个容器把请求发送出去,等客户返回信息时,查询容器中对应请求中特定的事件.开始的 ...
- js生成6位随机码
js生成6位随机数字: let chars = '0123456789'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/ let maxPos = chars.len ...
- react-native学习之环境安装
1.首先是java环境安装-安装JDK 2.安装Android-SDK,推荐以下地址:http://tools.android-studio.org/index.php/sdk 然后打开SDK Man ...
- ASP.NET 4.5.256 尚未在Web服务器上注册。
最近在网上下载的一个原型用VS2012打开报错如下: 解决方法: 打开网址:http://blogs.msdn.com/b/webdev/archive/2014/11/11/dialog-box-m ...
- [android] 与PHP的session进行交互demo
从MainActivity跳转到MailIndexActivity,第一个请求接口设置session,第二个activity请求接口获取session java代码中获取header头里面的Set-C ...
- c#之静态构造函数和单例模式
1.静态构造函数:在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类 public class A { ; : private static A instance_; publi ...
- Effective C++ .09 不在构造和析构过程中调用virtual函数
看过C++对象模型的话就可以知道,在构造基类时,完整的vtable没有建立起来(表项没有被相应的子类函数替换),因而无法调用到子类的函数(即构造函数中的virtual函数是本类里的方法,不是virtu ...