AtCoder Beginner Contest 107/AtCoder Regular Contest 101
はい。
https://beta.atcoder.jp/contests/abc107
A - Train
Python3
n,i=map(int,input().split()) print(n-i+1)
引き算して1つずらす。
B - Grid Compression
Python3
h,w=map(int,input().split()) l=["" for i in range(w)] yo=[] for i in range(h): s=input() for a,j in enumerate(s): l[a]+=j for i in l: if "#" in i: yo.append(i) x=len(yo[0]) ans=["" for i in range(x)] for i in yo: for a,j in enumerate(i): ans[a]+=j for i in ans: if "#" in i: print(i)
必死に該当の行と列を除く。
C - Triangular Relationship
Python3
n,k=map(int,input().split()) x=[int(i) for i in input().split()] l,r=[],[] for i in range(n): if x[i]<0 and i+1<n: l.append(abs(x[i]-min(x[i+1],0))) elif x[i]<0: l.append(-x[i]) if x[i]>=0 and i>0: r.append(x[i]-max(0,x[i-1])) elif x[i]>=0: r.append(x[i]) l=l[::-1] l=l[:k] r=r[:k] ll=len(l) rr=len(r) lx=sum(l) rx=sum(r) if ll<k: lx=lx*2+sum(r[:(k-ll)]) if rr<k: rx=rx*2+sum(l[:(k-rr)]) ans=min(lx,rx) o=[ll,[0,k-ll][ll<k]] p=[rr,[0,k-rr][rr<k]] for i in range(1,k): if o[1]==0: lx*=2 if p[1]==0: rx*=2 if o[1]+1<=rr and o[0]>0: lx-=l[o[0]-1]*2 lx+=r[o[1]] o[0]-=1 o[1]+=1 ans=min(ans,lx) if p[1]+1<=ll and p[0]>0: rx-=r[p[0]-1]*2 rx+=l[p[1]] p[0]-=1 p[1]+=1 ans=min(ans,rx) print(ans)
左右どちらかだけ全部使うのみだったり、端まで使って折り返したり、途中で折り返したりとかを全部調べた。かなり行数かかったけど他の人のを見るともっと短く出来るようで辛いですね。