题意:一个机器人在一个无穷大的网格图中,每秒能够上下左右走一步。它的行走方向序列是长度为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的更多相关文章

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

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

  2. Robot Framework用户手册 (版本:3.0)

    版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...

  3. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  4. RIDE -- Robot Framework setup

    RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...

  5. [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 ...

  6. Robot Framework自动化测试 ---视频与教程免费分享

    当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...

  7. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

  8. Robot Framework 的安装和配置(转载)

    Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...

  9. 解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题

    最新的jenkins打开jenkins robot framework报告会提示如下 Verify that you have JavaScript enabled in your browser.  ...

随机推荐

  1. shell脚本批量监控主机磁盘信息

    写一个配置文件保存被监控主机SSH连接信息,格式:IP User Port [root@Test ~]# cat host 10.10.10.10 root 22 10.10.10.11 root 2 ...

  2. C语言结构体和函数

    #include <stdio.h> struct Person { char *name; }; void change1(struct Person p); void change2( ...

  3. 21-7-数组相关api

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. myEclipse环境下配置springMvc项目,进行简单的请求

    1."File-->New-->WebProject"新建一个web项目,命名为springMvc 2.将所需要用到的jar包复制到WEB-INF/lib路径下,然后右 ...

  5. c++11 std::move()

    简单点理解,c++11 中的std::move() 函数,实际上就是将一个左值强制转换成一个右值引用数据类型,从而可以调用相应的对右值引用重载的函数. 如果使用std::move() 的返回值做为参数 ...

  6. python学习笔记(十)——正则表达式和re模块

    #正则表达式和re模块 # match(pattern, string,[flag]) #在字符串开始时进行匹配 # pattern 正则表达式 # string 要匹配的字符串 # [flag] 可 ...

  7. python的format函数是什么意思format是什么意思

    format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 2.单个参数可以多次输出,参数顺序 ...

  8. Python 刷题知识点

    if : elif : else : print('{0} \n{1} \n{2}' .format((a + b), (a - b), (a * b))) print(*[num**2 for nu ...

  9. 6358. 【NOIP2019模拟2019.9.15】小ω的仙人掌

    题目 题目大意 给你一串二元组\((a_i,b_i)\)的数列. 求最小的区间\([l,r]\)长度,满足\([l,r]\)中的每个二元组选或不选,使得\(\sum a_i=w\)且\(\sum b_ ...

  10. hive的数据存储格式

    hive的数据存储格式 Hive支持的存储数的格式主要有:TEXTFILE(行式存储) .SEQUENCEFILE(行式存储).ORC(列式存储).PARQUET(列式存储). 1 列式存储和行式存储 ...