题意:一个机器人在一个无穷大的网格图中,每秒能够上下左右走一步。它的行走方向序列是长度为l的循环。给你n个线索,包括ti:时间,xi,yi走到的坐标。让你构造出行走的方向序列?

标程:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=2000005;
 5 ll t,x,y,nx,ny;
 6 int n,l[N],r[N],len;
 7 struct node{ll ty,tz,x;node(){} node(ll A,ll B,ll C){ty=A;tz=B;x=C;}}a[N],b[N];
 8 bool operator < (const node &A,const node &B) {return A.ty<B.ty;}
 9 ll ceil(ll x,ll y)
10 {
11     if (x<0) x=-x,y=-y;
12     if (x==0) return 0;
13     if (y>0) return (x-1)/y+1;
14     else return x/y;
15 }
16 ll floor(ll x,ll y)
17 {
18    if (x<0) x=-x,y=-y;
19    if (x==0) return 0;
20     if (y>0) return x/y;
21     else return (x-1)/y-1;
22 }
23 void solve(node *a,int *ans)
24 {
25     sort(a+1,a+n+1);
26     ll L=0,R=len;
27     a[n+1]=node(len,-1,0);//设置边界!!!
28     for (int i=0;i<=n;i++)//要统计入最后一个限制S[len]=0-S*(-1)
29     {
30         ll d=a[i+1].ty-a[i].ty,q=a[i+1].x-a[i].x,p=a[i].tz-a[i+1].tz;
31         if (p>0)
32         {
33             L=max(L,ceil(-q,p));
34             R=min(R,floor(d-q,p));
35         }else if (p<0) {
36             L=max(L,ceil(d-q,p));
37             R=min(R,floor(-q,p));
38         }
39         if (L>R||p==0&&(q<0||q>d)) {puts("NO");exit(0);}
40     }
41     ll s=L,si=0;
42     for (int i=0,j=1;i<=n;i++)
43     {
44         si=(a[i+1].x-s*a[i+1].tz)-(a[i].x-s*a[i].tz);
45         while (si--) ans[j++]=1;
46         j=a[i+1].ty+1;//a[i+1]而不是a[i]
47     }
48 }
49 int main()
50 {
51     scanf("%d%d",&n,&len);
52     for (int i=1;i<=n;i++)
53     {
54         scanf("%lld%lld%lld",&t,&x,&y);
55         nx=x+y+t;ny=x-y+t;
56         if (nx&1) return puts("NO"),0;
57         nx/=2;ny/=2;
58         a[i]=node(t%len,t/len,nx);
59         b[i]=node(t%len,t/len,ny);
60     }
61     solve(a,l);
62     solve(b,r);
63     for (int i=1;i<=len;i++)
64       printf("%c","LDUR"[l[i]<<1|r[i]]);//此题的方向与常识相异!
65     return 0;
66 }

易错点: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即可。

转载于:https://www.cnblogs.com/Scx117/p/9089100.html

CF538G Berserk Robot相关推荐

  1. IOI2020集训队作业-9 (CF538G, CF674D, ARC101F)

    A - CF538G Berserk Robot Sol 将原题中的坐标(x,y)(x,y)(x,y)变成(x+y,x−y)(x+y,x-y)(x+y,x−y),原题的行走一步改成(1,1),(1,− ...

  2. Robot Framework(十八) 支持工具

    5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...

  3. Java Robot对象实现服务器屏幕远程监视

    Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者: xiepan110 出处: BLOG 责任编辑:方舟 摘要: 有时候,在Java应用程序开发中,如:远程监控或远 ...

  4. java robot类自动截屏

    直接上代码: package robot; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.InputE ...

  5. robot framework安装问题排查

    现象:小朋友电脑启动ride总会报错 探讨方向:重新安装ride 对应包无法解决 解决思路: 1.完全卸载python及对应库 2.安装RFS 64对应文件,发现安装各种库都报错,最后得到提示pip版 ...

  6. java robot 控制鼠标_Java-探索Robot类:[2]自动控制鼠标

    Robot系列的上一篇经验我介绍了一下Robot类的基本情况与使用,以及运用Robot类对屏幕进行截图操作.这一篇经验我将介绍如果用Robot类模拟鼠标操作. 1.Robot类的4个基本鼠标操作函数 ...

  7. LeetCode 489. Robot Room Cleaner--C++,Python解法

    题目地址:Robot Room Cleaner - LeetCode Given a robot cleaner in a room modeled as a grid. Each cell in t ...

  8. LeetCode 657 : Robot Return to Origin

    题目地址:Robot Return to Origin - LeetCode Acceptance:70.8% Difficulty:Easy There is a robot starting at ...

  9. pip install robot framework出现字符集编码错误

    在cmd下:pin install robot framework 报错: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in po ...

最新文章

  1. JGG :微生物所王军-综述固有免疫细胞在胃肠道疾病中研究进展
  2. 创新、颠覆、引领,从 0 到百亿美元市值的创操作指南
  3. 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
  4. VTK:PolyData之LoopBooleanPolyDataFilter
  5. php 比较2个数组,比较2个数组中的2个数组值Php
  6. 导致View树遍历的时机
  7. 如何创造出更优秀的用户体验?
  8. linux mysql使用
  9. javascript框架比较(三)
  10. [转载] python bytearray拼接_python-4-bytes和bytearray
  11. mysql id自动增长_MySQL中的6种约束,你掌握了几种?
  12. matlab图片集成成视频
  13. SIM800C 使用基站定位
  14. VM12即VMware Workstation 12 序列号
  15. 亲历2010中国移动开发者大会
  16. 【AD封装】2.4G PCB天线(量产用)
  17. 手机wap浏览器的设计
  18. LAMP平台部署及应用_wuli大世界_新浪博客
  19. 有一个3x4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号.
  20. 手绘图像检索:Deep Spatial-Semantic Attention for Fine-Grained Sketch-Based Image Retrieval

热门文章

  1. 移动互联网开发教学案例学习-13
  2. 开源项目CookiesPool流程分析
  3. 无法打开文件“opencv_core341.lib”
  4. RTMP vs SRT:延迟与最大带宽的比较
  5. 短网址URL生成接口
  6. STM32和MLx90614非接触红外温度传感器
  7. Ubuntu20.04无线网卡驱动安装
  8. 微信小程序 封装post请求 header加token code码拦截
  9. 惠普新CEO象征性年薪仅1美元 有望获大量股权
  10. 大数据平台架构与原型实现-读书笔记9