【cf849D】Rooter's Song(思维)

时间:2021-10-18 06:05:58

D. Rooter's Song

题意

x轴、y轴上有n个人,第i个人\(g_i==1\)则坐标为\((p_i,0)\)否则\((0,p_i)\),\(t_i\)秒后垂直所在坐标轴出发,到达边界x=w,或者y=h停止,速度都是1。

两个人相撞则方向互换。问最后每个人的位置。

题解

t秒后出发等价于位置往后移动t,起点就是x=p,y=-t,或者x=-t,y=p。然后x+y相等的点就是会相撞的,他们的终点位置会发生一些交换。

x+y相等的起点是在一条直线上,每个点撞来撞去其实守住了自己的相对位置,上面的还是在上面,左边的还是在左边。所以分别对应了一样排序好的终点位置。

代码

const int N=201000;
struct node{
int x,y,ex,ey,i;
}a[N],b[N];
int ansx[N],ansy[N];
bool cmp(node a,node b){
return a.x+a.y<b.x+b.y || a.x+a.y==b.x+b.y && a.x-a.y<b.x-b.y;
}
bool cmp2(node a,node b){
return a.x+a.y<b.x+b.y || a.x+a.y==b.x+b.y && a.ex-a.ey<b.ex-b.ey;
}
int main() {
int n,w,h;
sf(n);sf(w);sf(h);
rep(i,0,n){
int g,p,t;
sf(g);sf(p);sf(t);
if(g==1)
a[i]=(node){p,-t,p,h,i};
else
a[i]=(node){-t,p,w,p,i};
b[i]=a[i];
}
sort(a,a+n,cmp);
sort(b,b+n,cmp2);
rep(i,0,n){
ansx[a[i].i]=b[i].ex;
ansy[a[i].i]=b[i].ey;
}
rep(i,0,n) printf("%d %d\n",ansx[i],ansy[i]);
return 0;
}

【cf849D】Rooter's Song(思维)的更多相关文章

  1. codeforces 848B Rooter&&num;39&semi;s Song 思维题

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

  2. &lbrack;CodeForces - 848B&rsqb; Rooter&&num;39&semi;s Song 思维 找规律

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

  3. &lbrack;C&num;&rsqb;&lbrack;算法&rsqb; 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  4. Photoshop、Illustrator思维导图笔记

    半年前学习Photoshop时记得的思维导图笔记,可能不是很全,常用的基本都记下了.

  5. CYQ&period;Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. 计算机程序的思维逻辑 &lpar;8&rpar; - char的真正含义

    看似简单的char 通过前两节,我们应该对字符和文本的编码和乱码有了一个清晰的认识,但前两节都是与编程语言无关的,我们还是不知道怎么在程序中处理字符和文本. 本节讨论在Java中进行字符处理的基础 - ...

  7. 计算机程序的思维逻辑 &lpar;29&rpar; - 剖析String

    上节介绍了单个字符的封装类Character,本节介绍字符串类.字符串操作大概是计算机程序中最常见的操作了,Java中表示字符串的类是String,本节就来详细介绍String. 字符串的基本使用是比 ...

  8. 计算机程序的思维逻辑 &lpar;31&rpar; - 剖析Arrays

    数组是存储多个同类型元素的基本数据结构,数组中的元素在内存连续存放,可以通过数组下标直接定位任意元素,相比我们在后续章节介绍的其他容器,效率非常高. 数组操作是计算机程序中的常见基本操作,Java中有 ...

  9. 计算机程序的思维逻辑 &lpar;33&rpar; - Joda-Time

    Joda-Time上节介绍了JDK API中的日期和时间类,我们提到了JDK API的一些不足,并提到,实践中有一个广泛使用的日期和时间类库,Joda-Time,本节我们就来介绍Joda-Time.俗 ...

随机推荐

  1. LINQ系列:Linq to Object量词操作符

    量词操作符返回一个Boolean值,指示序列中是否存在部分或全部元素符号指定条件.LINQ中量词操作符包括:All.Any和Contains. 1. All All操作符判定在集合中是否所有的值都满足 ...

  2. Android中处理崩溃异常CrashHandler

    来源:http://blog.csdn.net/liuhe688/article/details/6584143 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程 ...

  3. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

  4. 4&period;2springmvc校验

    1.hibernate的校验框架validation所需要jar包: 2 在applicationContext.xml中配置校验器: <!-- 校验器 --> <bean id=& ...

  5. 对象的引用和clone

    $a=new s(); $b=$a; 这是引用,两者为同一个实例 $a=new s(); $b=$a; $b=clone $a; 这是clone,两者不是同一个实例,但拥有相同的属性 如果需要不相同的 ...

  6. JS产生四位随机数的方法

    <script>var charactors="1234567890"; var value='',i; for(j=1;j<=4;j++){ i = parse ...

  7. 如何使用json在前后台进行数据传输

    上一篇博客写到用javascript生成多组文本,可以让数据的输入不受显示,现在我们需要把这些输入写入数据库,这里就用到json传入. 首先,我们来写一下后台如何生成要传输的数据 function g ...

  8. Java之线程的控制

    1. join线程: 在线程执行过程中,有时想让另一个线程先执行,比如将一大问题分割成许多小问题,给每一个小问题分配线程,但所有小问题处理完后再让主线程进一步操作.此时我们可以在主线程中调用其它线程的 ...

  9. python进阶--打包为exe文件

    一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...

  10. Unity3DGUI:鼠标click

    Input函数监测鼠标操作 鼠标点击事件 鼠标双击事件