Code Formula 2014 予選B B - 11の倍数
備忘録
問題
回答
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 = iss() N = N[::-1] even = 0 odd = 0 for n in N[::2]: odd += int(n) for n in N[1::2]: even += int(n) print(even, odd) if __name__ == '__main__': main()
考え方
11の倍数云々の解説がありますが、
つまるところ奇数番目の数字の和と、偶数番目の数字の和を求める問題です。
Python
においては与えられる数字を文字列として扱って、スライスで偶数番目と奇数番目を抽出すると楽だと思います。
与えられるN
は最大で10 ** 1000
ですが、
今回の問題では桁数のみに注目するため、最大値が与えられても1回のfor
は500回程度のループになります。