/*
不要低头,不要放弃,不要气馁,不要慌张
题意:
从(0,0)出发与x轴正方向呈45度角的射线,在给定的矩形区域内不断发射,直到射入矩形的某个角停止。
给出多个坐标,问光线最早经过某坐标的时间。
思路:
1.明确光线反射次数不会超过n+m次(好像是这样==没细想)
2.发现规律,光线要么是符合x+y=k,或者x-y=k的直线。而且每次反射都会变到不同类型的直线。
3.知道出发点,算出反射点。
4.把点放到直线的vector里边。每次到了某条直线把直线上的点扫一遍,然后删掉。 */ #include<bits/stdc++.h>
using namespace std;
struct point{
point(){}
point(long long xx,long long yy,int iid){
x=xx;y=yy;id=iid;
}
long long x,y,id;
};
bool operator <(const point &a,const point &b){
if(a.x!=b.x)return a.y<b.y;
return a.x<b.x;
}
set<point> ms1[],ms2[];
long long rel[];
int n,m,k;
point next(point a,int num){
if(num&){
long long w=a.x+a.y;
long long x=;
long long y=w-x;
if(y>=&&y<=m&&(x!=a.x||y!=a.y))return point(x,y,);
x=n;
y=w-x;
if(y>=&&y<=m&&(x!=a.x||y!=a.y))return point(x,y,);
y=;
x=w-y;
if(x>=&&x<=n&&(x!=a.x||y!=a.y))return point(x,y,);
y=m;
x=w-y;
if(x>=&&x<=n&&(x!=a.x||y!=a.y))return point(x,y,);
}
else{
long long w=a.x-a.y;
long long x=;
long long y=x-w;
if(y>=&&y<=m&&(x!=a.x||y!=a.y))return point(x,y,);
x=n;
y=x-w;
if(y>=&&y<=m&&(x!=a.x||y!=a.y))return point(x,y,);
y=;
x=y+w;
if(x>=&&x<=n&&(x!=a.x||y!=a.y))return point(x,y,);
y=m;
x=y+w;
if(x>=&&x<=n&&(x!=a.x||y!=a.y))return point(x,y,);
}
}
long long cal(point a,point b){
return max(a.x-b.x,b.x-a.x);
}
int main()
{
memset(rel,-,sizeof(rel));
long long x,y,bf=;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=k;i++){
scanf("%lld%lld",&x,&y);
ms1[x-y+].insert(point(x,y,i));
ms2[x+y].insert(point(x,y,i));
}
point st(,,);
int num=;
while(){
x=st.x;y=st.y;
if(num&){
while(!ms2[x+y].empty()){
long long xx=ms2[x+y].begin()->x;
long long yy=ms2[x+y].begin()->y;
int id=ms2[x+y].begin()->id;
if(rel[id]==-)
rel[id]=bf+cal(point(xx,yy,),st);
ms1[x-y+].erase(point(xx,yy,));
ms2[x+y].erase(point(xx,yy,));
}
}
else{
while(!ms1[x-y+].empty()){
long long xx=ms1[x-y+].begin()->x;
long long yy=ms1[x-y+].begin()->y;
int id=ms1[x-y+].begin()->id;
if(rel[id]==-)
rel[id]=bf+cal(point(xx,yy,),st);
ms1[x-y+].erase(point(xx,yy,));
ms2[x+y].erase(point(xx,yy,));
}
}
bf+=cal(st,next(st,num));
st=next(st,num);
num++;
if((st.x==&&st.y==)||(st.x==&&st.y==m)||(st.x==n&&st.y==)||(st.x==n&&st.y==m))break;
}
for(int i=;i<=k;i++){
printf("%lld\n",rel[i]);
}
}

Codeforces 724C [坐标][乱搞][模拟]的更多相关文章

  1. Codeforces 723c [贪心][乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一个n和m. 第二行给n个数. 每次操作可以把n个数中的任何一个数替代为别的数,问最少的操作次数使得1.2.3.4.5...m中的数出现的次数 ...

  2. codeforces 1041 c 乱搞

    #include <bits/stdc++.h> using namespace std; struct po { int val; int id; }; po a[]; vector&l ...

  3. Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路

    题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是 ...

  4. Codeforces 538G - Berserk Robot(乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 一道很神的乱搞题 %%% 首先注意到如果直接去做,横纵坐标有关联,不好搞.这里有一个非常套路的技巧--坐标轴旋转,我们不妨将整个坐标系旋转 ...

  5. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)(A.暴力,B.优先队列,C.dp乱搞)

    A. Carrot Cakes time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  6. Codeforces 1182D Complete Mirror 树的重心乱搞 / 树的直径 / 拓扑排序

    题意:给你一颗树,问这颗树是否存在一个根,使得对于任意两点,如果它们到根的距离相同,那么它们的度必须相等. 思路1:树的重心乱搞 根据样例发现,树的重心可能是答案,所以我们可以先判断一下树的重心可不可 ...

  7. Codeforces 306D - Polygon(随机化+乱搞)

    Codeforces 题目传送门 & 洛谷题目传送门 中考终于结束了--简单写道题恢复下状态罢. 首先这一类题目肯定没法用一般的方法解决,因此考虑用一些奇淫的乱搞做法解决这道题,不难发现,如果 ...

  8. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  9. [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]

    题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...

随机推荐

  1. require.js的使用

    RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使用Re ...

  2. HDU 1171 背包

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. NSURLCache 和 NSCache 的区别

    NSURLCache 和 NSCache 的区别 NSURLCache提供的是URL Request缓存,可以在Memory和Disk上:NSCache提供了HTTP Request外的东西的缓存方式 ...

  4. maven3.04管理jetty9.2.10启动web项目

    在pom.xml文件中添加如下: <build>    <pluginManagement>        <plugins>            <plu ...

  5. PHP日志扩展 SeasLog-1.6.8, 性能更优

    SeasLog-1.6.8 发布了,性能更优. 改进日志: 1.6.8: 优化内存使用和性能,修复已知Bug. - Fixed issue #97 PHP5.* Cached Block. - Fix ...

  6. Term_Application

    1 CRM(Customer Relationship Management)客户关系管理: (对ERP下游管理不足的补充) 是一个获取.保持和增加可获利客户的方法和过程. 市场营销.销售管理.客户关 ...

  7. Xcode与OX 版本对照表

    xcode1.0-xcode2.x 版本 OS X运行版本 OS X SDK(s) 1.0 OS X Panther(10.3.x) OS X Puma(10.1.x),OS X Jaguar(10. ...

  8. [转]Redis实现分析

    Redis实现分析 浏览次数:1018次 KITERUNNER_T 2014年10月19日 字号: 大 中 小 分享到: QQ空间 新浪微博 腾讯微博 人人网 豆瓣网 开心网 更多 1   1 环境准 ...

  9. CI框架源码分析

    这几天,把ci源码又看了一遍,于是有了新的收获.明白了在application目录下core文件夹的作用,就是用来写ci核心文件的扩展的, 而且需要在配置文件中添加类前缀MY_. CI框架整体是但入口 ...

  10. Flume 实战(1) -- 初体验

    前言: Flume-ng是数据收集/聚合/传输的组件, Flume-ng抛弃了Flume OG原本繁重的zookeeper和Master, Collector, 其整体的架构更加的简洁和明了. 其基础 ...