gym101102I(模拟)
来源:互联网 发布:正当防卫3内存优化补丁 编辑:程序博客网 时间:2024/06/06 09:32
题意:给出t组样例,每组样例输入r和c代表空间的长和宽。给出机器人的行动顺序,机器人不能走出范围,求出尽可能少的跳过的步骤。
思路:典型的模拟,重点在于起点未定。可以记录机器人分别在四个方向走出的最大值。当最右-最左>c时,多出来的那一部分必定要跳过,同理上下。
for(int i=0;i<strlen(s);i++){ x=nowx,y=nowy;//nowx代表x的当前坐标,同理nowy; if(s[i]=='^') y++; if(s[i]=='>') x++; if(s[i]=='<') x--; if(s[i]=='v') y--; if((max(maxx,x)-min(x,minx)>=c)||((max(maxy,y))-min(y,miny)>=r)) skip++; else{ maxx=max(maxx,x); maxy=max(maxy,y); minx=min(minx,x); miny=min(miny,y); nowx=x,nowy=y;//在走完这一步之后没有冲突,那就更新起点。 } }
AC代码:
#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int r,c; scanf("%d%d",&r,&c); char s[200007]; scanf("%s",s); // printf("%s",s); int x=0,y=0,skip=0,nowx=0,nowy=0,maxx=0,minx=0,maxy=0,miny=0; for(int i=0;i<strlen(s);i++){ x=nowx,y=nowy; if(s[i]=='^') y++; if(s[i]=='>') x++; if(s[i]=='<') x--; if(s[i]=='v') y--; if((max(maxx,x)-min(x,minx)>=c)||((max(maxy,y))-min(y,miny)>=r)) skip++; else{ maxx=max(maxx,x); maxy=max(maxy,y); minx=min(minx,x); miny=min(miny,y); nowx=x,nowy=y; } } printf("%d\n",skip); } return 0;}
阅读全文
0 0
- gym101102I(模拟)
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟:
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- PowerBI开发 第六章:数据网管
- java 文件大小格式化显示工具
- 蓄水池算法
- python 2和python 3相互切换
- 【知识整理】Node.js-Sequelize之原始查询
- gym101102I(模拟)
- Java 网络 IO 模型
- SQLite数据库使用方法详解
- 程序员是一个什么能力都可以发挥作用的平台
- CF 855B. Marvolo Gaunt's Ring【枚举||递推】
- 写在开始之前
- 5从尾到头打印链表python
- Python笔记--生成器
- shell 字体操作