2011年2月23日水曜日

Codeforces Beta Round #57 (Div. 2)

今回も今回とて最悪な結果ではありましたが、糞コード生産、及び問題を全然解けなかったという生き恥を晒すために今日もBlogを書く。

問題1

与えられた2つのビット列について排他的論理和を求める問題。
ビット列の最大長が100であるため、long longを使用してもあふれてしまう。
素直にストリングを使い、評価していった。

コード



#include
#include
#include
#include
#include

using namespace std;
#define REP(X, Y) for(long long int i = X;i < Y;i++)
#define rep(X) REP(0, X)
void main(){
string str1;
string str2;
string *result = new string;
getline(cin, str1);
getline(cin, str2);
rep(str1.length()){
*result += (str1.at(i) != str2.at(i))? "1":"0";
}
cout << *result << endl;

}


問題2

3つのベース文字列と、それに続く幾つかの文字列が与えられる。
ベース文字列には英字とsignと呼ばれる3つの記号 "-", ";", "_"が含まれているが、signは無視してよい。
続く文字列が、ベース文字列を結合したものであれば、ACCと出力し、結合したものでなければWAと出力する。

文字列系はC++で使い慣れていなかったため、PHPを使い出力した。実は問題を勘違いしており、コンテスト中に提出出来なかったのだが、終了してから完成させた。

考え方としては、ベース文字列からsignを全て取り去り純粋な文字列にした後、全て大文字に変換。
検査文字列も同じようにsignを取り去り大文字にした後、随時ベース文字列を検索し、半角スペースで置換。
最後に半角スペースも取り去り、検査文字列が空になっていなければWAを出力、空であればACCを出力。
この方法だと、ベース文字列Bがベース文字列Aを部分的に含んでいるとWrong Answerが出る。
答え見てもいいけど悔しいのでもうちょっと頑張る。
素直にベース文字列と検査対象文字列をsign抜き取り、大文字か小文字に合わせた上で3!通り試せばよいということだった。
ナイー^ヴな実装が一番良いようだ。



問題3は解けず。4,5はまだ見てない。
精進だな。。。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。