题目链接

正解:排序+模拟。

我们注意到两个点碰撞的必要条件,$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的更多相关文章

  1. codeforces 848B Rooter's Song 思维题

    http://codeforces.com/problemset/problem/848/B 给定一个二维坐标系,点从横轴或纵轴垂直于发射的坐标轴射入(0,0)-(w,h)的矩形空间.给出点发射的坐标 ...

  2. Codeforces 848B Rooter's Song(分类+模拟)

    题目链接 Rooter's Song 题意  有n个舞者站在x轴上或y轴上,每个人有不同的出发时间.x轴上的舞者垂直x轴正方向移动,y轴上的舞者垂直y轴正方向移动. 当x轴的舞者和y轴的舞者相遇时,他 ...

  3. codeforces 848B - Rooter's Song(构造+几何)

    原题链接:http://codeforces.com/problemset/problem/848/B 题意:好多个人分别从x,y轴不同位置不同时间往垂直坐标轴方向移动,一旦相遇他们转向,问所有人的到 ...

  4. [CodeForces - 848B] Rooter's Song 思维 找规律

    大致题意: 有一个W*H的长方形,有n个人,分别站在X轴或Y轴,并沿直线向对面走,第i个人在ti的时刻出发,如果第i个人与第j个人相撞了 那么则交换两个人的运动方向,直到走到长方形边界停止,问最后每个 ...

  5. Codeforces 849D.Rooter's Song

    D. Rooter's Song time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  6. 【Codeforces】849D. Rooter's Song

    [算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...

  7. 【推导】【分类讨论】Codeforces Round #431 (Div. 1) B. Rooter's Song

    给你一个这样的图,那些点是舞者,他们每个人会在原地待ti时间之后,以每秒1m的速度向前移动,到边界以后停止.只不过有时候会碰撞,碰撞之后的转向是这样哒: 让你输出每个人的停止位置坐标. ①将x轴上初始 ...

  8. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  9. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

随机推荐

  1. 下面我将随机抽取一名幸运女生,XXXXX

    个人在经过长久以来(约等于4小时)的奋战,终于实现了一个上课老师提问并抽奖的小程序.希望这个程序变得非常非常实用 课程的理解:在我的项目开始之前,先学习了一下UML项目类图的画法,和类与类之间的关系. ...

  2. JavaEE 7 最全教程集锦(转)

    转自 http://www.iteye.com/news/28009 甲骨文公司已经在6月份正式发布了JavaEE 7,该版本带来了诸多新的规范及特性,将企业级开发提升到了一个新的层次. Java E ...

  3. Node.js学习笔记(四) --- fs模块的使用

    目录 . fs.stat 检测是文件还是目录 . fs.mkdir 创建目录 . fs.writeFile 创建写入文件 . fs.appendFile 追加文件 . fs.readFile 读取文件 ...

  4. 读EntityFramework.DynamicFilters源码_心得_整体了解01

    前两天同事发给我一个连接地址:实体框架高级应用之动态过滤 EntityFramework DynamicFilters为什么会找到动态过滤的内容,是源于前段时间,我们想做一个个人blog 后端用.NE ...

  5. Java集合 之List(ArrayList、LinkedList、Vector、Stack)理解(new)

    一. ArrayList底层实现原理 对比 和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOn ...

  6. spring的aop 基于schema

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 一 前期工作 1.新建一个java项目,我是使用的maven,所以我新建了一个简单的maven项目,因为mav ...

  7. pyhton基础

    python是一种什么语言?python是一种动态解释性的强类型定义的语言(1)编程语言分类 编译型: 把源程序的每一条语句都编译成机器语言,并保存成二进制文件, 这样运行时计算机可以直接以机器语言来 ...

  8. iview框架下,modal内容过长,select选项位置不对

    问题 modal组件中内容过长,超过一屏,有滚动条后,里面包含的select组件选项内容,位置会不对 解决 在使用select的时候添加transfer属性

  9. IOS如何下载旧版本应用APP

    前言 文章相对来说比较复杂,特别是查找版本ID对应的步骤,这里推荐使用另一种方案,操作起来更简单. 本文介绍如何使用Workflow及Fiddler下载IOS旧版本APP应用. 实现原理 通过Work ...

  10. Linux基础之-网络配置,主机名设置,ssh登陆,scp传输

    一. 网络配置修改 1.临时修改(ip,dns,netmask,gateway) 临时修改网络配置,只要没有涉及到修改配置文件的,在network服务重启后,所有设置失效 2.永久修改(ip,dns, ...