LoginSignup
0
0

More than 5 years have passed since last update.

Codeforces Beta Round #1

Posted at

はい。ふらふらとして何も進歩しておりませんが過去問始めました。
http://codeforces.com/contest/1

A問題
ざっくり大意
Berland市のTheatreの庭、面積n*mがある。
a*aの石を使って最小の個数で庭を敷き詰める。

原点Oから埋めていく感じでイメージすると端っこのほうが石がいれられなくなるはずなのですが、It's not allowed to break the flagstones らしくよくわからじ。
大勢が見た限りでは共通した方法を使っていたので定番の問題、式が成り立つのだろうか。。。

((n+a-1)/a)*((m+a-1)/a)
((庭の縦+石-1)/石)*((庭の横+石-1)/石)

石は今回は正方形なので縦横が変わりませんが長方形の石の場合の式の当てはめ方は現状不明。

a.py
(n,m,a)=map(int,raw_input().split())
#if n%a != 0: n+= n%a
#if m%a != 0: m+= m%a
print ((n+a-1)/a)*((m+a-1)/a)

B問題
ざっくり大意
エクセルのようなスプレッドシート
与えられるn行の入力は2種類ある。
BC23 BCは列、23は行
R23C55 RはRow(行)、Cはcolumn(列)

解法を参照したのは602523 ItsLastDayさん。

b.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import timeit
import time
import sys
import io
import re
import math

n=int(raw_input())
for i in range(n):
    m=raw_input()
#入力がR数値C数値であるかチェック
#元々はmatch=で書かれていたが、将来に使いまわす際にmatch文と衝突するので避けました。
    chk=re.search(r'R(\d+)C(\d+)',m)
    if chk:
#searchしてる1カ所目、2カ所目とか取り出せるのか??すげぇ
        x=int(chk.group(2))
        res=''
        while x:
#組み込み関数ordを要見直し
            res=chr(ord('A')+(x-1)%26)+res
            x=(x-1)/26
#行は数値取り出せれば何も加工する必要なし
        print (res+chk.group(1))
    else:
#ここもsearchを数値以外と数値のみを取り出す仕込みになっている
        t=re.search(r'(\D+)(\d+)',m)
        x=0
        for letter in t.group(1):
            x=x*26+(ord(letter)-ord('A')+1)
#行は取りさせれば加工する必要なし
#列はここもord()を
        print ('R%dC%d' % (int(t.group(2)), x))

C問題
なるほどわからん
問題文の和訳付きで解説してる方がいらっしゃいました。
http://d.hatena.ne.jp/kyuridenamida/20120124/1327336975

ちょっとここは保留で

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0