君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Beta Round #8

はい。
http://codeforces.com/contest/8

A. Train and Peter

strings

ざっくりと大意

・aの先にbが見えたらforward、aの反転したものの後ろにbの反転したものが見えたらbackward。
・両方ならboth、いずれも成立しなければfantasy。

Python2

s=raw_input()
a=raw_input()
b=raw_input()
s1=len(s)
a1=len(a)
ans=[0,0]
for i in range(s1):
    x=s[i:i+a1]
    if s[i:i+a1]==a:
        if b in s[i+a1:]:
            ans[1]=1
    if a[::-1]==x:
        tmp=s[:i]
        if b[::-1] in tmp:
            ans[0]=1
print 'both' if sum(ans)==2 else 'forward' if ans[1]==1 else 'backward' if ans[0]==1 else 'fantasy'

問題文が読解できなくて他の人の解をみて推定した。。つらい。。先頭から1文字ずつずらしてaとaの反転に一致するものを探してごにょごにょした。。問題文が辛かった。

B. Obsession with Robots

constructive algorithms,implementation

ざっくりと大意

・ロボットが迷路探索をしている。 ・迷路の形状は不明。 ・最短経路で探索をしたい。

方針のようなもの

・最大で移動が100回らしいので上下左右に100ずつの大きさが取れるようにリストを用意。 ・左右に移動する際は元々いるマスと、上下のマス(最短で移動できる可能性の合ったマス)をマーキングする。 ・上下に移動する際は(ry

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time
import sys, io
import re, math
start = time.clock()
i=raw_input()
l=[['*']*200 for a in range(200)]
x=y=100
chk=1
l[y][x]='#'
for j in range(len(i)):
    if i[j]=='U':
        l[y][x-1]=l[y][x+1]='#'
        y-=1
        if l[y][x]!='#':
            l[y][x]='#'
        else:
            chk=False
            break
    elif i[j]=='D':
        l[y][x-1]=l[y][x+1]='#'
        y+=1
        if l[y][x]!='#':
            l[y][x]='#'
        else:
            chk=False
            break
        
    elif i[j]=='R':
        l[y+1][x]=l[y-1][x]='#'
        x+=1
        if l[y][x]!='#':
            l[y][x]='#'
        else:
            chk=False
            break
    elif i[j]=='L':
        l[y+1][x]=l[y-1][x]='#'
        x-=1
        if l[y][x]!='#':
            l[y][x]='#'
        else:
            chk=False
            break
print 'OK' if chk else 'BUG'

[y][x]という表記でyが縦移動、xが横移動とか色々酷かった。
最初は単に同じ経路、マスを通るとBUGと思ってて失敗した。