AGC015 A - A+...+B Problem

備忘録

問題

atcoder.jp

回答

import sys
import os
import math
import bisect
import itertools
import collections
import heapq
import queue
import array
import time
import numpy as np
from numpy import linalg as LA

# 時々使う
# import numpy as np
# from decimal import Decimal, ROUND_HALF_UP
# from scipy.sparse.csgraph import csgraph_from_dense, floyd_warshall
# from collections import defaultdict, deque

# 再帰の制限設定
sys.setrecursionlimit(10000000)


def ii(): return int(sys.stdin.buffer.readline().rstrip())
def il(): return list(map(int, sys.stdin.buffer.readline().split()))
def fl(): return list(map(float, sys.stdin.buffer.readline().split()))
def iln(n): return [int(sys.stdin.buffer.readline().rstrip())
                    for _ in range(n)]


def iss(): return sys.stdin.buffer.readline().decode().rstrip()
def sl(): return list(map(str, sys.stdin.buffer.readline().decode().split()))
def isn(n): return [sys.stdin.buffer.readline().decode().rstrip()
                    for _ in range(n)]


def lcm(x, y): return (x * y) // math.gcd(x, y)


# MOD = 10 ** 9 + 7
MOD = 998244353
INF = float('inf')


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, A, B = il()
    print(max((A+B*(N-1)) - (A*(N-1)+B) + 1, 0))


if __name__ == '__main__':
    main()

考え方

整数の総和は作ることができる最小値と最大値の差分です。
最小値は値AN-1個とBが1つの合計(A * (N - 1) + B)です。
最大値は値BN-1個とAが1つの合計(A + B * (N - 1))です。
これらの差分が回答となりますが、
与えられる値によってはマイナスになること、
最小値も作ることができる値として含める(最大値と最小値の差分+1が回答になる)ことに注意が必要です。