0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

筆者はレート600前後の茶色コーダ

この前開催されたABC360で解けなかったD問題を解説ACしたので備忘録

問題ページ

実装コード

S[i] が 1, 0の集団に分け、それぞれをソート
それぞれの解の上限、下限をしゃくとり法で計算して足せばOK

import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

def main():
    N, T = rLI()
    S = rS()
    X = rLI()
        
    bn = []
    len_bn = 0
    bp = []
    for i in range(N):
        if S[i] == '0':
            bn.append(X[i])
            len_bn += 1
        else:
            bp.append(X[i])
    bn.sort()
    bp.sort()
    ans = 0
    l = 0
    r = 0
    for p in bp:
        while l < len_bn and p > bn[l]: 
            l += 1
        while r < len_bn and p + 2 * T >= bn[r] :
            r += 1
        ans += r - l
    print(ans)
if __name__ == '__main__':
    main()


まとめ

ABC360Dを解いた、解法にはしゃくとり法を使用した

感想

今回の問題はしゃくとり法を使う所までは検討が着いたが、
解の上限、下限を計算する方法が思いつかなかった、
この部分は数学よりな話だと思うので、そこら辺の地力も必要だと感じた。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?