唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

AtCoder Beginner Contest #012 ooox

Dが解けずに198位でした

A: スワップ - AtCoder Beginner Contest #012 | AtCoder

2つの数値が与えられるので、順番を逆にして出力

# -*- coding: utf-8 -*-
import math,string,itertools,fractions,heapq,collections,re,array,bisect

def ls():
    return raw_input().strip().split()
def ln():
    return map(int, raw_input().strip().split())
def ld():
    return map(float, raw_input().strip().split())

a = ln()

print a[1], a[0]

B: 入浴時間 - AtCoder Beginner Contest #012 | AtCoder

秒を時間と分に直す

# -*- coding: utf-8 -*-
import math
import sys
import datetime

n = int(raw_input().strip())

print '{:02d}:{:02d}:{:02d}'.format(n/3600, (n%3600)/60, n%60)

C: 九九足し算 - AtCoder Beginner Contest #012 | AtCoder

掛け算の九九の値の総和に足し忘れている可能性がある部分を昇順で答える

# -*- coding: utf-8 -*-
import collections

n = input()
mem = collections.defaultdict(list)

add = 0

for i in xrange(1, 10):
    for j in xrange(1, 10):
        mem[i * j].append((i, j))
        add +=i * j

mem[add - n].sort()
for p, q in mem[add - n]:
    print '{} x {}'.format(p, q)

D: バスと避けられない運命 - AtCoder Beginner Contest #012 | AtCoder

グラフのある始点からの最大の最短距離が、最小になる始点の時の最大の最短距離を求める

ワーシャルフロイドとか各点からのダイクストラとかやれば解ける(ただしC++とかJavaとかの高速な言語に限る

以下のPythonのコードはダイクストラの始点として一部のノードだけをランダムに選んで実行する
運良く正解のノードが選ばれていれば正解する

# -*- coding: utf-8 -*-
import heapq,collections,sys,random,math

def ln():
    return map(int, raw_input().strip().split())
 
N, M = ln()
d = collections.defaultdict(dict)
data = sys.stdin.readlines()
for i in data:
    a, b, t = map(int, i.split())
    d[a-1][b-1] = t
    d[b-1][a-1] = t
 
z = [10000000] * N
def dijkstra(s):
    dist = z[:]
    dist[s] = 0
    heap = []
    heapq.heappush(heap, (0, s))
    
    while heap:
        dd, v = heapq.heappop(heap)
        dv = dist[v]
        if dv < dd:
            continue
        for i in d[v]:
            dvi = d[v][i]
            if dist[i] > dv + dvi:
                dist[i] = dv + dvi
                heapq.heappush(heap, (dist[i], i))
    return max(dist)
 
result = []

if N >= 260 and M >= 35000:
    x = random.sample(xrange(N), int(math.ceil(3*N/5)))
else:
    x = xrange(N)
for i in x:
    result.append(dijkstra(i))
print min(result)