読者です 読者をやめる 読者になる 読者になる

AtCoder Beginner Contest #013 復習

はい。
http://abc013.contest.atcoder.jp/

A - A

入力がAから数えて何番目のアルファベットであるか

print 'SABCDE'.index(raw_input())

ord使ったりも出来るし、使う言語によって結構異なるかも。。

B - 錠

0-9でループする錠を加算か減算のボタンを最小回数で押して開ける

n=int(raw_input())
x=int(raw_input())
print min(abs(n-x),min(n,x)-max(n,x)+10)

単純な差か、9と0の境を跨ぐ場合での最小値を探す。

C - 節制

高橋君の満腹度を一度も0以下にすることなく食費を最低限に抑える

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# kmjpさんのをパクリ
import time
import sys
import io
import re
import math
import itertools
#sys.stdin=file('input.txt')
#sys.stdout=file('output.txt','w')
#10**9+7
mod=1000000007
#start = time.clock()
n,h=map(int,raw_input().split())
a,b,c,d,e=map(int,raw_input().split())

#費用を問題上の最大値より大きくしておく??
ret=1<<60
for TA in range(n+1):
    LD=n-TA
    hang=h+TA*b

    if hang>LD*e:
        TB=0
    else:
        TB=max(0,(LD*e-hang)/(d+e)+1)
    ret=min(ret,TA*a+TB*c)
print ret

http://kmjp.hatenablog.jp/entry/2014/08/17/0900
kmjpさんのトコのがしっかりと分かってる上で解けた、書いた解説です。 をパクろう。
満腹度の最大値は無限大である->いくらでも食い溜めしてよいという前提になる??
乗り切る必要があるのがN日間、1つ目の食事をx日間、2つ目の食事をy日間とると、食事を取らない日が(N-x-y)日間に定まる(合計はn日間なので2つの食事パターンの日が定まれば、取らない日も普通の普通に定まる)。
H+xB+yD-(N-x-y)E>0 の範囲で xA+yCを最小化する必要があるらしい。 食事を先に食い溜めたとすると上記の式の H スタートの満腹度に xB+yD で食事によって得る満足度を加算して (N-x-y)E で食事をしないことによって満腹度が減る のが0以下にならないようにしなければいけない。 上記の式のx,yの食事のパターンで食費の計算のxA+yCを最小化する。
ここまでわかる...φ(・ω・`c⌒っ

式を変形するとy>((N-x)E-H-xB)/(D+E) となり、xを総当りしながらyの最小値を求めてxA+yCの最小値を求める。。 解説スライドでも同様の式の記載があるのでちょっと後でまた考える。。