CF538G Berserk Robot
题意:一个机器人在一个无穷大的网格图中,每秒能够上下左右走一步。它的行走方向序列是长度为l的循环。给你n个线索,包括ti:时间,xi,yi走到的坐标。让你构造出行走的方向序列?
标程:
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int N=;
- ll t,x,y,nx,ny;
- int n,l[N],r[N],len;
- struct node{ll ty,tz,x;node(){} node(ll A,ll B,ll C){ty=A;tz=B;x=C;}}a[N],b[N];
- bool operator < (const node &A,const node &B) {return A.ty<B.ty;}
- ll ceil(ll x,ll y)
- {
- if (x<) x=-x,y=-y;
- if (x==) return ;
- if (y>) return (x-)/y+;
- else return x/y;
- }
- ll floor(ll x,ll y)
- {
- if (x<) x=-x,y=-y;
- if (x==) return ;
- if (y>) return x/y;
- else return (x-)/y-;
- }
- void solve(node *a,int *ans)
- {
- sort(a+,a+n+);
- ll L=,R=len;
- a[n+]=node(len,-,);//设置边界!!!
- for (int i=;i<=n;i++)//要统计入最后一个限制S[len]=0-S*(-1)
- {
- ll d=a[i+].ty-a[i].ty,q=a[i+].x-a[i].x,p=a[i].tz-a[i+].tz;
- if (p>)
- {
- L=max(L,ceil(-q,p));
- R=min(R,floor(d-q,p));
- }else if (p<) {
- L=max(L,ceil(d-q,p));
- R=min(R,floor(-q,p));
- }
- if (L>R||p==&&(q<||q>d)) {puts("NO");exit();}
- }
- ll s=L,si=;
- for (int i=,j=;i<=n;i++)
- {
- si=(a[i+].x-s*a[i+].tz)-(a[i].x-s*a[i].tz);
- while (si--) ans[j++]=;
- j=a[i+].ty+;//a[i+1]而不是a[i]
- }
- }
- int main()
- {
- scanf("%d%d",&n,&len);
- for (int i=;i<=n;i++)
- {
- scanf("%lld%lld%lld",&t,&x,&y);
- nx=x+y+t;ny=x-y+t;
- if (nx&) return puts("NO"),;
- nx/=;ny/=;
- a[i]=node(t%len,t/len,nx);
- b[i]=node(t%len,t/len,ny);
- }
- solve(a,l);
- solve(b,r);
- for (int i=;i<=len;i++)
- printf("%c","LDUR"[l[i]<<|r[i]]);//此题的方向与常识相异!
- return ;
- }
易错点:1.注意设置l处的边界,要统计入最后一个限制S[len]=0-S*(-1),否则不等式不完整。
2.注意负数和0的上下取整。
题解:转换+不等式构造
这道题思路非常喵!
将x,y坐标分开考虑,每次x坐标+-1,或y坐标+-1。难以处理。
设置(x+y,x-y)为新的参数,这样每次两个参数都会有+-1的变化。
再进一步,((x+y+t)/2,(x-y+t)/2)设置,每次要么+1,要么+0。
——以上是坐标和时间结合题的某种套路。
之后就是构造合法解的事情了。
这样对于一系列的t,由于l是循环节长度,设Sl为单位循环加了多少个1,S[i]表示i时间内加了多少个1,可以列出等式S[t%l]=Xi-Sl*[t/l]。
以及由相邻依次递增的t%i列出一系列不等式:0<=Sb-Sa<=b-a。整体化成0<=p*Sl+q<=d的形式,可以解出Sl的取值范围,取范围中的任意值皆可。
这样可以解出所有S[t%l],直接按区间填上对应数量的1即可。
CF538G Berserk Robot的更多相关文章
- Codeforces 538G - Berserk Robot(乱搞)
Codeforces 题目传送门 & 洛谷题目传送门 一道很神的乱搞题 %%% 首先注意到如果直接去做,横纵坐标有关联,不好搞.这里有一个非常套路的技巧--坐标轴旋转,我们不妨将整个坐标系旋转 ...
- Robot Framework用户手册 (版本:3.0)
版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- RIDE -- Robot Framework setup
RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...
- [8.2] Robot in a Grid
Imagine a robot sitting on the upper left corner of grid with r rows and c columns. The robot can on ...
- Robot Framework自动化测试 ---视频与教程免费分享
当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...
- robot创建桌面图标(转载)
桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...
- Robot Framework 的安装和配置(转载)
Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...
- 解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题
最新的jenkins打开jenkins robot framework报告会提示如下 Verify that you have JavaScript enabled in your browser. ...
随机推荐
- 【转载】Jmeter业务请求比例1
ps:文章转自订阅号“测试那点事儿”,链接:https://mp.weixin.qq.com/s/qVD4iNO0QqRIwAIq9_E_Kw 在进行综合场景压测时,由于不同的请求,要求所占比例不同, ...
- leetcode.字符串.12整数转罗马数字-Java
1. 具体题目 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 ...
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- Windows server 2016 / Windows 10关于域管理员帐号权限不足的问题
今天在测试windows server 2016的域创建时,当安装结束之后,发现使用Administrator用户进行操作时,被提示了权限不足这个问题.于是我在百度上查找了一番之后,找到了解决方法. ...
- wchar用wcout输出正常cout是?
- java 面试2019
[第一部分] 面试要领[第1题] 流程必知必会[第2题] JDK源码[第二部分] 类和对象[第二篇] 面向对象基础[第1题] 面向对象是什么?[第2题] 类加载的过程[第3题] 类加载器有哪些[第4题 ...
- final、finally和finalized的区别?
(1)final:被final修饰的类,不被能继承:被final修饰的方法,不能被重写:被fianl修饰的量,为常量,只能被赋值一次: (2)finally:异常处理,和try.catch结合使用,可 ...
- 判断有向无环图(DAG)
1.拓扑排序 bfs 所有入度为0的先入选. 2.tarjan 1个点1个集合 3.暴力 一个点不能重新到达自己
- python 打印出水仙花数
打印出三位水仙花数方法及解释 num = 100while num <= 999: #这里num 小于等于999 则运行 填1000也可以 a = num % 10 #num对10取余 b = ...
- Laravel 开发环境搭建
本人使用的是Laravel5.5版本,需要PHP7支持,所以安装的环境是Apache2.php7.0.mysql5.7,系统为ubuntu14.04LTS(14以下的版本对php7支持不够),主要参考 ...