题目链接:https://vjudge.net/contest/28079#problem/M

题目大意:

一个边界长为L宽为W的平面同时发射n个台球,运动K秒,台球碰到桌面及两(多)个台球相撞情况如下图所示,求K秒后这n个球的位置(要排序,依次按横纵坐标升序):

解题思路:其实跟以前的经典题蚂蚁爬木棍是一样的,总结为以下几点:

     ①两(多)球相撞的情况可以忽略,因为两球撞击后可以看作两个球按原来的方向运动只是序号换了一下而已,多球同理。

     ③碰壁时反向

     ②可以把横纵坐标分开计算,这样就很明了了,可以分别发现周期性的规律,比如长为L那么2L为一个周期球会回到原点,%一下再找一下2L之内的规律就好了,就不啰嗦了,代码里有。

代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long LL;
const int N=; struct node{
int x,y;
}res[N]; bool cmp(node a,node b){
return a.x==b.x?a.y<b.y:a.x<b.x;
}
//规律
int cal(int x,int h,int t){
t%=*h;
if(t<h-x)
return x+t;
if(t<*h-x)
return *h-t-x;
return x+t-*h;
} int main(){
int T;
scanf("%d",&T);
int cas=;
while(T--){
int L,W,n,K;
scanf("%d%d%d%d",&L,&W,&n,&K);
for(int i=;i<=n;i++){
char s[];
int x,y;
scanf("%d%d%s",&x,&y,s);
if(s[]=='N')
y=cal(y,W,K);
else if(s[]=='S')
y=W-cal(W-y,W,K);
if(s[]=='E')
x=cal(x,L,K);
else if(s[]=='W')
x=L-cal(L-x,L,K);
res[i].x=x;
res[i].y=y;
}
sort(res+,res++n,cmp);
printf("Case %d:\n",++cas);
for(int i=;i<=n;i++){
printf("%d %d\n",res[i].x,res[i].y);
}
}
}

LightOJ 1323 Billiard Balls(找规律(蚂蚁爬木棍))的更多相关文章

  1. LightOJ - 1323 - Billiard Balls(模拟)

    链接: https://vjudge.net/problem/LightOJ-1323 题意: You are given a rectangular billiard board, L and W ...

  2. LightOJ 1245 数学题,找规律

    1.LightOJ 1245   Harmonic Number (II)   数学题 2.总结:看了题解,很严谨,但又确实恶心的题 题意:求n/1+n/2+....+n/n,n<=2^31. ...

  3. LightOJ 1369 Answering Queries(找规律)

    题目链接:https://vjudge.net/contest/28079#problem/P 题目大意:给你数组A[]以及如下所示的函数f: long long f( int A[], int n  ...

  4. LightOJ 1410 Consistent Verdicts(找规律)

    题目链接:https://vjudge.net/contest/28079#problem/Q 题目大意:题目描述很长很吓人,大概的意思就是有n个坐标代表n个人的位置,每个人听力都是一样的,每人发出一 ...

  5. LightOj 1245 --- Harmonic Number (II)找规律

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1245 题意就是求 n/i (1<=i<=n) 的取整的和这就是到找规律的题 ...

  6. LightOJ 13361336 - Sigma Function (找规律 + 唯一分解定理)

    http://lightoj.com/volume_showproblem.php?problem=1336 Sigma Function Time Limit:2000MS     Memory L ...

  7. HDU 4861 Couple doubi (数论 or 打表找规律)

    Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...

  8. HDU 4861 Couple doubi(找规律|费马定理)

    Couple doubi Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  9. uva--10714+找规律

    题意: 一根长度为len的木棍上有n仅仅蚂蚁.蚂蚁们都以1cm/s的速度爬行;假设一仅仅蚂蚁爬到了木棍的端点,那么他就会掉下去;假设两仅仅蚂蚁碰到一起了,他们就会掉头往相反方向爬行.输入len和n仅仅 ...

随机推荐

  1. 大坑!有网,电脑qq登不上去!!

    手机qq --> 设置 --> 账号设备安全 -->  允许手机电脑同步在线 或是其他设置干扰导致

  2. NAT网络地址转换模拟过程

    原理图,如图1 图1 以下为配置NAT网络地址转换的实验: eNSP模拟图,如图2 图2 Step1.给路由器的每个接口赋予一个地址,如图3,图4 图3 图4 AR1和AR2中添加路由表项,如图5,图 ...

  3. 最小点权覆盖集&最大点权独立集

    最小点权覆盖集 二分图最小点权覆盖集解决的是这样一个问题: 在二分图中,对于每条边,两个端点至少选一个,求所选取的点最小权值和. 方法: 1.先对图二分染色,对于每条边两端点的颜色不同 2.然后建立源 ...

  4. 使当前对象相对于上层DIV 水平、垂直居中定位

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  5. uniqid()

    uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.

  6. $('.goods_tag_ids_all')[0].checked = true;//~~~~~ 单条改变checkbox 属性样式

    //点击左边全选选中时,都全选$('.goods_tag_ids_all').on('click',function(){ if($('.goods_tag_ids_all').is(':checke ...

  7. 使用rabbitmq消息队列

    一.前言 在python中本身就是存在队列queue.一个是线程队列queue,另一个是进程multiprocessing中的队列Queue. 线程queue:只用于线程之间的数据交互 进程Queue ...

  8. 阿里云对象存储OSS使用 HTTPS

    一.前言 阿里云对象存储oss本身也是可以用HTTPS直接访问的,但是它本身的地址是http://***.oss-cn-hangzhou.aliyuncs.com这样的,那么如果我们想使用自己的域名, ...

  9. 「Linux+Django」Django+CentOs7+uwsgi+nginx部署网站记录

    转自:http://www.usday.cn/blog/51 部署前的准备: 1. 在本地可以运行的django项目 2. 一台云服务器,这里选用Centos系统 开始部署: 首先在本地导出项目需要的 ...

  10. Maven将java项目打包生成可运行jar

    Maven将java项目打包生成可运行jar Maven插件配置 <plugins> <plugin> <groupId>org.apache.maven.plug ...