プログラミングしたい日記

いつもプログラミングとか音楽聞いてたりする人の日記です

AOJ Volume 0022, 0023

いつものやっていきまーす
HHKB買いました。まだなれないので打ちにくいですが、タイプする感覚はGOODです!

AOJ Volume 0 Q22

Maximum Sum Sequence | Aizu Online Judge

問題の概要

連続する項の和が最大となる時、その和を出力せよ。

つまづいた所

総当りしか思いつかなくて、それでいいのか迷って他の方々の答えみたら総当りばっかだったのでもうそれでいいやってなりました(笑)
あと、intの最小値を出すのが不思議だった。

解説

総当りでなんとか見つけます。

ソース
import sys

def solve(numbers):
    max = -sys.maxsize
    for i in range(0, len(numbers)):
        sum = 0
        for j in range(i, len(numbers)):
            sum += numbers[j]
            if sum > max:
                max = sum
    return max


while True:
    n = int(input())
    if n == 0:
        break
    numbers = []
    for i in range(0, n):
        numbers.append(int(input()))

    print(solve(numbers))

AOJ Volume 0 Q23

円の交差 | Aizu Online Judge

問題の概要

2つの円があり、それぞれの円をA, Bとする。ただし、A≠Bとする。
BがAの中にある時2, AがBの中にある時-2, AとBが共有点を持つ時1, AとBが重ならない場合0を出力せよ。

解説

数学がわかってればつまづくところはないと思う。

つまづいたところ

内包表記を忘れて戸惑った。でもこれ便利ですね。

ソース
import sys

def solve(circleA, circleB):
    xa, ya, ra = circleA
    xb, yb, rb = circleB
    # まず、円の中に円が含まれる場合を判定
    if ra <= rb:
        if distancePow2(xa, ya, xb, yb) < pow(rb - ra, 2):
            return -2
    else:
        if distancePow2(xa, ya, xb, yb) < pow(rb - ra, 2):
            return 2

    # 共有点を持つ時を判定
    if pow(rb - ra, 2) <= distancePow2(xa, ya, xb, yb) <= pow(rb + ra, 2):
        return 1

    return 0

def distancePow2(xa, ya, xb, yb):
    return pow(xb - xa, 2) + pow(yb - ya, 2)

n = int(input())
for i in range(0, n):
    inStr = input()
    circleAInfo = [float(data) for data in inStr.split(" ")[0:3]]
    circleBInfo = [float(data) for data in inStr.split(" ")[3:6]]
    print(solve(circleAInfo, circleBInfo))
CSS Design created by satotaka99. Thankyou.