• このエントリーをはてなブックマークに追加

Codeforcesに初参戦しました。

Codeforcesってなに

いわゆる、プログラミングコンテスト。以下の特徴があります。

  • 2時間で5題問題を解く
  • ロシア発祥
  • 月に2、3度の頻度で開かれる
  • 利用できる言語が豊富
    • GNU C++ 4
    • GNU C 4
    • MS VS C++ 2005
    • Free Pascal 2
    • Delphi 7
    • C# Mono 2.6
    • Java 6
    • Ruby 1.9
    • Python 2.7
    • PHP 5.3
    • Haskell GHC 6.12
    • F# 2.0
    • OCaml
    • Scala

コンテストに参加するまで

Codeforcesの登録方法

まずは、Webページにアクセス

Gmailアカウントがあれば、それで認証して終了。わぁ、登録カンタン。

コンテストへの参加方法

コンテストが近くなると、トップページに開催案内がでる。クリックして登録完了。わぁ、登録カンタン。

コンテストに参加してみて

問題文は、すべてWebで公開されています。こんな感じ。

テスト画面でコーディングします。エディタがあり、ここでコードを作成します。Inputを与えて、「Run」を押して、テストを実施。Outputを確認します。

解答が完成したら、SUBMITタブを選択。解答を提出します。

標準入力、標準出力の扱い方について

初め、この入力と出力が意味不明だった。データが扱えないので、なにもできない!

Inputは標準入力, Outputは 標準出力なので、まずはこれを変数に格納することに一苦労。

C++ での Inputの扱い方

C++では、cinを使って、Inputを変数に格納します。

たとえば、Inputが

1 2

のときは、

cin >> a >> b;

のようにすると、値が変数に格納できます。スペースで区切られたものを、それぞれの変数に格納します。

cinは一回で1行を読みこむので、複数行にまたがるときは、cinを何度も書いて読みこむ。

C++ での Outputの扱い方。

coutを使って、標準出力に書き出します。

たとえば、rsltをOutputに書き出す場合は、

cout << rslt << endl;

当日の感想

問題のInputとOutputの扱い方がわからずに、それだけで30分おわってしまった。

エディタからの解答作成はちょっと面倒だっだ。TopCoderのようにEclipseのPluginがあればいいのたけれども、ないみたい。

関数の型も、テストも自分で考えるので、TopCoderよりも不親切にも感じた。

当日解いた問題

これは、システムテストで落とされました。。。初参戦にして、惨敗。。。(ノД`)

Codeforces Round #192 (Div. 2) A

#include <iostream>
using namespace std;

int main()
{
    int r, c;
    string field[10];
    int eat_bit[10][10];

    int eat_count = 0;
    
    cin >> r >> c;

    for(int i=0; i < r; i++) {
        cin >> field[i+1];
    }

    for(int i = 0; i < r; i++) {
        for(int j = 0; j < c; j++) {
          eat_bit[i+1][j] = 0;
        }
    }
        
    for(int i = 0; i < r; i++) {
        for(int j = 0; j < c; j++) {
            if( eat_bit[i+1][j] == 1) continue;
            if( field[i+1][j] == 'S') {
                eat_count = eat_count - j;
                j = 11;
                continue;
            }
            
            eat_count++;
            eat_bit[i+1][j] = 1;
        }
    }

   for(int j = 0; j < c; j++) {
            for(int i = 0; i < r ; i++) {
            if( eat_bit[i+1][j] == 1) continue;
            if( field[i+1][j] == 'S') {
                eat_count = eat_count - (i-1);
                i = 11;
                continue;
            }
            eat_count++;
            eat_bit[i+1][j] = 1;
        }
    }

    
    cout << eat_count;
    
    return 0;
}

I tried Codeforces for the first time

What is Codeforces

It’s so called “Programming Contests”。 Special feature are follows.

  • Solve 5 problems within 2 houres
  • Russia origin
  • held three or four times per month
  • Lot’s of Langages supports
    • GNU C++ 4
    • GNU C 4
    • MS VS C++ 2005
    • Free Pascal 2
    • Delphi 7
    • C# Mono 2.6
    • Java 6
    • Ruby 1.9
    • Python 2.7
    • PHP 5.3
    • Haskell GHC 6.12
    • F# 2.0
    • OCaml
    • Scala

How to Enter Cotests

How to register Codeforces

At first access to the url

If you have a google account, authenticate with that。Wah, it’s easy.

How to Enter Contest

If the contest day comming, there shows a notice at the top page. Just click and is over. Wah, it’s easy

Start Contest!

You can see plobrems at the web, like that

Coding at test view. there is an editor, and you can make there. Give input date、 push the “Run” to run the test. Check the output

If your answer complete, move to SUBMIT tab, then submit your answer.

How to handle standard input and standard output

At first, I can’t understand this input and output。I can’t handle input and can’t do anything!

How to handle stdin with C++

In C++, you can put data to variable with cin

For example 、Input is

1 2
cin >> a >> b;

cin input date 1 line at once, so if you want to input another line, use multiple times

How to handle stdout with C++

In C++, you can put data to stdout with cout

For example、output rslt to stdout

cout << rslt << endl;

Impressions

I can7t figure it out stdin and stdout, so I spend 30min to research

Codinng with web edittor is not easy. It seems that there is no plugin to code from eclipse, like topcoder

My answer

My answer was failed with system test,..(ノД`)

Codeforces Round #192 (Div. 2) A

#include <iostream>
using namespace std;

int main()
{
    int r, c;
    string field[10];
    int eat_bit[10][10];

    int eat_count = 0;
    
    cin >> r >> c;

    for(int i=0; i < r; i++) {
        cin >> field[i+1];
    }

    for(int i = 0; i < r; i++) {
        for(int j = 0; j < c; j++) {
          eat_bit[i+1][j] = 0;
        }
    }
        
    for(int i = 0; i < r; i++) {
        for(int j = 0; j < c; j++) {
            if( eat_bit[i+1][j] == 1) continue;
            if( field[i+1][j] == 'S') {
                eat_count = eat_count - j;
                j = 11;
                continue;
            }
            
            eat_count++;
            eat_bit[i+1][j] = 1;
        }
    }

   for(int j = 0; j < c; j++) {
            for(int i = 0; i < r ; i++) {
            if( eat_bit[i+1][j] == 1) continue;
            if( field[i+1][j] == 'S') {
                eat_count = eat_count - (i-1);
                i = 11;
                continue;
            }
            eat_count++;
            eat_bit[i+1][j] = 1;
        }
    }

    
    cout << eat_count;
    
    return 0;
}