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

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #175 (Div.2)

はい。
http://codeforces.com/contest/285

A. Slightly Decreasing Permutations

ざっくりと大意

・1からnまでの数列の内のk個の数を末尾から降順で
・k個の降順の数は先に纏めても昇順のものと交互でもよい??

方針のようなもの

・よくわからんのでとりあえずk個の降順を先処理で

n,k=map(int,raw_input().split())
l=range(1,n+1)
ans=l[-1:-1*(k+1):-1]+l[0:n-k]
print ' '.join(map(str, ans))

ああ、rangeで数列作ってから出力の仕方を弄るよりも出力する時に作ればよかった。問題によってはTLEの分かれ目になるかもしれないので気をつけるべし。。

n,k=map(int,raw_input().split())
print ' '.join(map(str,range(n,n-k,-1)+range(1,n-k+1)))

と思ったらあんまり早くならなかった。まぁ問題の解読もあまり良くできていないので気にしすぎないようにしよう。

B. Find Marble

ざっくりと大意

・何を言ってるか分からん

方針のようなもの

・後で

C. Building Permutation

ざっくりと大意

・1からnの数列で\(a_1\)から\(a_i\)の数列を作る手順(1を加算/減算で1手)で最小はいくつか??

方針のようなもの

・同じ数字があったらソレは一応除外して絶対値で近いのを優先する??
・でも例えば4,2から2,0を作ろうとした時は2が固定で4->0にして4手なのも、4->2と2->0で4手なのも手数は一緒
・2は固定と仮想したほうが色々やりやすいと思ったけどそんな必要ないかも

n=int(raw_input())
l=[int(x) for x in raw_input().split()]
l.sort()
chk=range(1,n+1)
ans=0
for i in xrange(n):
    ans+=abs(l[i]-chk[i])
print ans

ソートして差を加算して行くだけだった。