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 ...
随机推荐
- FZU2168——防守阵地 I——————【找规律或前缀和】
防守阵地 I Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 前端渲染模板(一):Thymeleaf
一.使用 本篇文章将以SpringBoot为框架来介绍Thymeleaf的用法. 1 资源文件的约定目录结构 Maven的资源文件目录:/src/java/resources spring-boot ...
- sql语句将身份证号数字转换成特殊字符
SELECT Tname , STUFF(Idcard,,,'*********') as Idcard,Completion from demo
- 购物车之CheckBox所有事件
html 主要是循环
- [android] 标题部分管理
标题分类 1.1 普通标题 1.1.1 标题内容管理 1.1.2 帮助和返回的按钮 1.2 未登录的标题 1.3 登陆中的标题 1.4 登陆完成后的标题 package com.tsh.lottery ...
- js 表格合并单元格
5列 根据需要可添加 或 删除 strOneTemp strTwoTemp strThreeTemp strFourTemp strFiveTemp //合并单元格 this.mergeC ...
- 学习笔记2_Day09_servlet的细节
Servlet细节 l 不要在Servlet中创建成员!创建局部变量即可! l 可以创建无状态成员! l 可以创建有状态的成员,但状态必须为只读的! 1 Servlet与线程安全 因为一个类型的 ...
- 从官网下载mod_jk.so
最近在搞apache和tomcat集群,这里就要用到mol_jk.so,在官网找了很久才知道在哪里下载,英语是硬伤啊. 1.打开tomcat官网 http://tomcat.apache.org/ 2 ...
- js对象之间的继承
js的对象之间的继承抛弃了原型与构造器的概念,而转为字面量对象之间进行属性拷贝的方式进行继承. 首先我们来写一个封装好的继承函数: function extend(parent){ var child ...
- JavaScript的重载(通过argument.length)
偶然间在博客园看到的关于js的重载(重载就是一组具有相同名字.不同参数列表,实现不同操作的函数或方法)问题,作为初学者,在看红宝书的时候,记得书中有概念说明js是没有重载的 所以,觉得有必要把这一段 ...