BOJ 2467溶液


https://www.acmicpc.net/problem/2467
2秒、128 MBメモリ
input :
  • N (2 <= n <= 100,000)
  • 溶液の特性値(-1000億円<=溶液<=1億円)<-昇順で入力します.
  • output :
    2つの溶液の特性値はに出力され、
  • 0に最も近い溶液を生成することができる.
    条件:
  • が2つ以上ある場合、いずれかの
  • が出力される.
    入力が昇順で入力されているか、2つの部分に分かれている場合は、2つのポインタから考えます.
    始点と終点から2つの値で移動します.
    加算された絶対値が前の値より小さい場合は、正解が更新されます.
    加算値が正の値の場合は、値の大きい側(右側)のポインタ-1を小さくします.
    負の値の場合は、値を増やし、小さな(左)エッジのポインタを+1にします.
    import sys
    
    n = int(sys.stdin.readline())
    data = list(map(int, sys.stdin.readline().split()))
    
    start = 0
    end = len(data) - 1
    
    ret = [0, 0]
    val, flag = 9999999999999, 1
    
    while start < end:
        mix = data[start] + data[end]
        if abs(mix) < val:
            ret = [data[start], data[end]]
            val = abs(mix)
        if mix > 0:
            end -= 1
        elif mix < 0:
            start += 1
        else:
            print(data[start], data[end])
            flag = 0
            break
    if flag:
        print(ret[0], ret[1])
    しかも価格の範囲が10億なので、最大の差は20億です.