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

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

Codeforces Beta Round #12 (Div 2 Only)

はい。

A. Super Agent

implementation

ざっくりと大意

・3*3で.かxが与えられる。
・symmetricな配置ならYES、そうでなければ'NO'らしい。

方針のようなもの

・2列目の[0]と[2]が異なると対称でなくなるので最小に判定させる。 ・1列目を[0]からと、3列目は[2]から比較する。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time
import sys, io
import re, math
start = time.clock()
a=[]
ans='NO'
for i in range(3):
    a.append(raw_input())
if a[1][0]==a[1][2]:
    for j in range(3):
        if a[0][j]==a[2][-1*(j+1)]:
            ans='YES'
        else:
            ans='NO'
            break
else:
    ans='NO'
print ans

B. Correct Solution?

ざっくりと大意

・とある数nを0始まりがないように並び替えて作ることの出来る最小の数とmが同じであるか??

方針のようなもの

・nから作れる最小の数を作ってmと比較する。

ans=['WRONG_ANSWER','OK']


def men(x):
    y=list(x)
    y.sort()
    z=len(y)
    for i in range(z):
        if y[i]!='0':
            y[i],y[0]=y[0],y[i]
            break
    return ''.join(y)


n=raw_input()
m=raw_input()

print ans[1] if m==men(n) else ans[0]

とりあえず一文字ずつstr扱いでリストにしてソートして'0'始まりだったらそれ以外が出るまで探してからスワップで、作ることの出来る最小の数になるのでそれと比較する。

C. Fruits

ざっくりと大意

・m個のフルーツとn個のタグでの最小値と最大値??
・4 2 1 10 5で3種のフルーツ最小なら1,2,4で7 最大なら4,5,10で19
・3 5 1 6 8 1で4種5個のフルーツ最小なら1,1,1,3,5 最大なら3,5,6,8,8で30

方針のようなもの

・多分ソートすればどうとでもなりそうな気がする。

n,m=map(int,raw_input().split())
l=map(int,raw_input().split())
l.sort()
w={}
while m:
    m-=1
    s=raw_input()
    if w.has_key(s):
        w[s]+=1
    else:
        w[s]=1
w2=sorted(w.items(), key=lambda x:x[1])
p=len(w2)
a=b=chk=0
for i in range(-1,-p-1,-1):
    a+=l[chk]*w2[i][1]
    chk+=1

for j in range(-1,-p-1,-1):
    b+=l[j]*w2[j][1]
print a,b

最小は小さい数のタグと多い数のフルーツを優先して使う、最大は大きい数のタグと多い数のフルーツを優先して使えば大丈夫 だった。