今日も独りで立ち話

ポンコツ博士課程の院生が思ったことをそのまま書くブログ

MENU

知識0からプログラミングを始めた(AtCoder挑戦4週目)

ちょっとずつ勉強ペースが落ちてるので、今週は頑張らねば…

 

 

知識0からプログラミングを始めた(AtCoder挑戦1週目) - 今日も独りで立ち話

知識0からプログラミングを始めた(AtCoder挑戦2週目) - 今日も独りで立ち話

知識0からプログラミングを始めた(AtCoder挑戦3週目) - 今日も独りで立ち話
 

1日目 多重ループの話

これに関しては特になんなく理解できたとは思う

実際にどう使うかってのはまだ実感はわいてないけど

 

2日目

なし

 

3日目

なし

 

4日目

多重ループをもう一回見ていて、いまいち範囲for文を使いこなせてないというか、説明を読めばわかるけど、まだ概念的に理解というところまでいってないんだろうなという感じなのを確認した

 

それと同時に配列と関数もよくわかってない気がする

こちらも説明を読めばわかるけど、使えるかというと怪しい奴

 

5日目(2.03)★あとで例題をもう一回解く

段々ややこしくなってきた

多重配列の話

多重配列の概念自体はまあなんとなくすんなりと理解できた

ただ、やっぱり実装するとなると難しい

 

 #include <bits/stdc++.h>
using namespace std;

int main() {
int N, M;
cin >> N >> M;
vector<int> A(M), B(M);
for (int i = 0; i < M; i++) {
cin >> A.at(i) >> B.at(i);
}

// ここにプログラムを追記
// (ここで"試合結果の表"の2次元配列を宣言)
vector<vector<char>> data(N, vector<char>(N, '-'));

int x = 0;
int y = 0;


for(int k = 0; k < M; k++){


x = A.at(k) - 1;
y = B.at(k) - 1;

data.at(x).at(y) = 'o';
data.at(y).at(x) = 'x';
}
for(int i = 0; i<N; i++){
for(int j = 0; j<N; j++){
cout << data.at(i).at(j);
if(j == N-1){
cout << endl;
}
else{
cout << " ";
}

}
}


}

これを解くのに結構時間がかかってしまった

無駄にfor文を使うことにこだわってしまっていて、本質的な勘違いをしていたのが恥ずかしい

またM試合目と表として出力される値は1ずれていることになかなか気づかず

(表では0試合~M-1試合と出力されるので)

terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 10) >= this->size() (which is 3)

のエラーがずっと出てきて、「要素数は3であってるはずなのになんでだろう」と悩み続けてしまった

改行するかどうかの分岐はヒントを見てしまった

 

endlは改行であるという理解はあったものの、「coutで始まってendlで終わる」みたいな変な認識をしてしまっていたので、ヒントに例示されていたような条件で改行する方法を思いつけなかったのは素直に反省しよう

 

6日目

参照をやってるんだけど、説明を読んでわかったようなわかってないような感じ

連動して変化するってことしか理解できてなくて、概念的な理解まで到達してない

 

問題2に入ってから難易度が高くてしんどい…