LoginSignup
0
1

More than 1 year has passed since last update.

paiza POH steins_gate #paizaシュタゲ

Last updated at Posted at 2021-07-28

正則表現のエントリーポイント

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*''}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1