找试场——世上无难题,只要肯思考_耀晨SYW

4 篇文章 0 订阅
4 篇文章 0 订阅

【未经作者同意,不许转载!!!!!!未经作者同意,不许转载!!!!!!未经作者同意,不许转载!!!!!!】

【讨论加我QQ:1721324995  讨论加我QQ:1721324995  讨论加我QQ:1721324995  非诚勿扰!非诚勿扰!非诚勿扰!】


题目见链接【戳】

思路

      上来直接暴力。

      但是,暴力也是要有技术的。比如在刚刚过去的NOIP,因为暴力没打好的我从320降到270(╯﹏╰)。这一题主要思路是:读入字符串,判断是否是数字。如果是,则按现方向行进;否则,是right则方向向右,是left则方向向左。其中最难处理的是转向,就连老师讲的这题的题解,都十分麻烦,甚至要用10多行来处理转x向。我琢磨一下,想到二维搜索中的ty和tx(有些人不习惯用ty、tx,直接是在x、y后面加减,建议大家用tx、ty)。但是在这里,下标是个麻烦事儿。

      比如当k(tx和ty的下标)为3,转向指令为右(这里我写的应为k+1)时,(k+1)mod 4=0!因此我想到一种方法:把tx、ty的数组界限改为0..3(见下图法一)。然而我似乎是个死脑筋,应又试出了一种方法(见下图法二)。

              

                           (法一)                                                                                                    法二)

      也是很可以啊,两种方法都AC了(此处应有掌声)!不知我是怎么想出来的,总之一定花了不少脑筋。这灵验了沃仔基(我自己)的话:“世上无难题,只要肯思考。”

      下面上AC程序(此程序用的是法二):

const
 tx:array[1..4]of longint=(0,1,0,-1);
 ty:array[1..4]of longint=(1,0,-1,0);
var
 i,n,t,x,y,k:longint;
 st:string;flag:boolean;

begin
 readln(n);t:=1;flag:=true;
 for i:=1 to n do begin
  readln(st);
  if (st[1]>='0')and(st[1]<='9') then begin
   val(st,k);
   x:=x+k*tx[t];y:=y+k*ty[t];
   writeln('(',x,',',y,')');flag:=false;
  end
  else begin
   if st[1]='r' then t:=t mod 4+1 else t:=(t+2)mod 4+1;
  end;
 end;
 if flag then write('(0,0)');
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值