Time Limit : 1 Second Memory Limit : 65536 KB
Source : 第十届山东省ACM省赛
Problem Link : ZOJ 4115
Author : Revolver Date : 2019-5-20
题意:
一个机器人,在一个二维平面上,刚开始的坐标是(0,0),我们给他n和k两个值,分别代表一组指令有几个命令,和命令循环执行多少次,在这过程中,求这个机器人与原点之间最大的曼哈顿距离。
分析:
刚开始我们想的是最大的曼哈顿距离点肯定在最后一次循环中,我们交了一发wa了,后面我想到了这个测试数据11,3 RRRRRLLLLLL 发现最大的曼哈顿距离还可以是第一个循环中,于是我们分析出了最大的曼哈顿距离只可能在第一次循环或最后一次循环中。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 long long n,i,j,k,a,b,x,y,max,p; 6 string g; 7 scanf("%lld",&n); 8 for(i=0;i<n;i++) 9 { 10 scanf("%lld%lld",&a,&b); 11 cin>>g; 12 x=0,y=0; 13 max=-999999; 14 for(j=0;j<a;j++) 15 { 16 if(g[j]=='U') 17 y++; 18 else if(g[j]=='D') 19 y--; 20 else if(g[j]=='R') 21 x++; 22 else if(g[j]=='L') 23 x--; 24 p=abs(x)+abs(y); 25 if(p>max) 26 { 27 max=p; 28 } 29 } 30 x=x*(b-1); 31 y=y*(b-1); 32 for(j=0;j<a;j++) 33 { 34 if(g[j]=='U') 35 y++; 36 else if(g[j]=='D') 37 y--; 38 else if(g[j]=='R') 39 x++; 40 else if(g[j]=='L') 41 x--; 42 p=abs(x)+abs(y); 43 if(p>max) 44 { 45 max=p; 46 } 47 } 48 printf("%lld\n",max); 49 } 50 return 0; 51 52 }