正則表現のエントリーポイント
1.sh
# !/bin/sh
sed -z 's/\n/;/'
性能解析のタイプセーフ
経験値、振り分け時は分割できるのか(サンプルが丁寧だったので助かった)
2.rb
# !/usr/bin/ruby
n,k,*a=$<.read.tr('.','').split.map &:to_i
# p a.map{|e|(e+k-1)/k}.sum # 分割できないならこっちの式になる
p (a.sum+k-1)/k
例外処理のタブーサーチ
3.rb
n,_,l=gets.split.map &:to_i
a=n.times.map{gets.split.map &:to_i}
p *l.times.map{
gets.split.map &:to_i
}.each_cons(2).map{|x,y|
z=y.zip(x).map{|a,b|a-b}
a.index(z)+1
}
進化戦略のプロシージャ
問題文に記載がないが、どの部屋にも直接移動できる。 連結成分がループならデッドロックあり。
4.rb
# !/usr/bin/ruby
n,m=gets.split.map &:to_i
h=Hash[*m.times.flat_map{
gets.split.map &:to_i
}]
visited={}
h.each{|k,v|
next if visited[k]
next if k==v
s=k
while h.has_key?(k)
nxt=h[k]
break if visited[nxt]
if nxt==s
puts :Yes
exit
end
k=nxt
visited[k]=true
end
}
puts :No
なお隣り合った部屋にしか移動できない場合は部屋の並び順が一致しているか見れば良い(はず)。
4_WA.rb
# !/usr/bin/ruby
n,m=gets.split.map &:to_i
a,b=m.times.map{
gets.split.map &:to_i
}.transpose.map{|e|
f=Hash[*e.sort.each_with_index.flat_map{|e,i|[e,i]}]
e.map{|x|f[x]}
}
puts a==b ? :No : :Yes
問題文、あかんと思います。。
ネット・ガーディアンの奮闘
点数が最もマイナスかつ削除可能なマスを削除。
…TLEが非常にきついです笑
ranking.rb
# !/usr/bin/ruby
D=[[-1,0],[1,0],[0,-1],[0,1]]
def is_safe_to_remove(r,xd,yd)
cnt=0
visited={}
r.size.times{|y|r[0].size.times{|x|
next if [x,y]==[xd,yd] || r[y][x]==0 || visited[[x,y]]
cnt+=1
visited[[x,y]]=true
q=[[x,y]]
while !q.empty?
cx,cy=q.shift
D.each{|dx,dy|
nx=cx+dx
ny=cy+dy
if 0<=nx&&nx<r[0].size && 0<=ny&&ny<r.size && [nx,ny]!=[xd,yd] && r[ny][nx]==1 && !visited[[nx,ny]]
visited[[nx,ny]] = true
q.push [nx,ny]
end
}
end
}}
cnt==1
end
h,w=gets.split.map &:to_i
a=h.times.map{gets.split.map &:to_i}
r=h.times.map{[1]*w}
start_time = Time.now
while Time.now - start_time<15
#p r
mh=mw=nil
h.times{|y|w.times{|x|
if r[y][x]==1 && a[y][x]<0 && (!mh || a[mh][mw]>a[y][x]) && is_safe_to_remove(r,x,y)
mh=y;mw=x
end
}}
break if !mh
r[mh][mw]=0
end
r.each{|e|puts e*''}