ARC011 A - 鉛筆リサイクルの新技術
備忘録
問題
回答
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") m, n, N = il() ret = N while N >= m: div, mod = divmod(N, m) N = (div * n) + mod ret += div * n print(ret) if __name__ == '__main__': main()
考え方
与えられるn, m, N
の範囲が1000
以下のため、
素直に指示をシミュレートするとよいと思います。
鉛筆の作り方はm
本の鉛筆をn
本に変換します。
つまり、N
本の鉛筆が存在するとき、(N // m) * n
本が新たな鉛筆となります。
このとき、N % m
で余る鉛筆を求めることができるため、
1回のリサイクル後に残る鉛筆は(N // m) * n + N % m
本になります。