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

天下一プログラマーコンテスト2014予選B

atcoder

はい。
http://tenka1-2014-qualb.contest.atcoder.jp/
レート変動しないし、上位は狙えないのでA問題以外提出しなかった。

A - HAGIXILE

ざっくりと大意

・HAGIYAをHAGIXILEに置換

方針のようなもの

・replaceで

python -c "import re; print raw_input().replace('HAGIYA','HAGIXILE')"

Bashで提出したけどpythonワンライナーで良かった気がする・・・ 真のBash使いなら sed "s/HAGIYA/HAGIXILE/" だったらしい

#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
        double pai=3.141592653589;
        string a;
        cin>>a;
        a.replace(a.find("HAGIYA"),6,"HAGIXILE");
        printf("%s\n",a.c_str());
        return 0;
}

C++も試してみた。今までC++試すときもscanf/printfに使おうとしてきたけど色々やりにくいし無駄に学習コストかけてる感が凄くなったので素直にcin/cout使おう。。。

B - エターナルスタティックファイナル

ざっくりと大意

・Tの単語を繋ぎあわせてSを作るけどよくわからん

方針のようなもの

・よくわからん

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# http://tenka1-2014-qualb.contest.atcoder.jp/submissions/218984
# puyoさんをパクった
import time
import sys
import io
import re
#10**9+7
mod=1000000007
#start = time.clock()
#漸化式なんて解説なしでもDPわかる・出来る層にしか通じなくね??と思う
#受け取る予定の単語数をNで 多分あんまり工夫の余地なし
N=input()
#作成する単語をSで 多分あんまり工夫の余地なし
S=raw_input()
#完成させる単語の長さを知っておく 使う直前に用意でも良さそうだけど
M=len(S)
#作成に使う単語を全てリストへ放り込む
T=[raw_input() for _ in xrange(N)]
#[1,0,0,0....0]な感じのリストを用意
dp=[1]+[0]*M
#この二重ループよく分からんので後で考える
for i in xrange(M):
    for t in xrange(N):
        chk=len(T[t])
        if S[i:i+chk]==T[t]:
#保存する数は常にmodの余りだけで良い
#最終の数は同じだが計算速度にかなり影響する
            dp[i+chk]=(dp[i+chk]+dp[i])%mod
print dp[-1]