はじめに
初めまして、この記事が初記事となります。
私はAtcoder茶色のぺーぺーですが、
灰色から茶色までやってきたことをまとめたいと思います。
もうn番煎じなネタなので他の方の記事も見た方がいいかもしれません。
記事の対象者
- 大学生でちょっとプログラミングやった人
- 灰色の手前から茶色までの人
- 1、2回コンテストに参加したことがある人
環境
- C++( Python使いは他の人の記事を見てね! )
- VS code(環境構築は他の人のry)
コンテストに挑む上で気を付けること
はい、ここからが本題です。
問題解いてる間になんかめっちゃ時間かかる...とか感じたことありませんか?
私がこのタイプで「何で周りの人こんな早いん?」ってなってました。
気を付けるべき点をさらっと見てみましょう。
競プロ向きのC++を書こう
競プロはC++がいいって言ってたしC++で書こうってなりますよね?
しかし、学校で習うC++って全然競プロ向きじゃなかったりするんです。
(私はC++だと思っていた言語がC言語でした...)
いくつか例をあげます。
- 入出力まわり
# include<iostream>
int main(void){
int x;
//入出力()
scanf("%d",&x);
printf("%d",x);
}
これでも全然大丈夫なんですが、下記のほうがもっと短く書けます。
私は特別な事情が無い限り下記のように書くようにしています。
# include<stdio.h>
int main(void){
int x;
//入出力()
std::cin >> x;
std::cout >> x;
}
- 配列の取り方
動的配列を使っています。int[10000000]と書いてると0の数が分からなくなります。
# include<iostream>
# include<vector>
int main(void)
{
std::vector<int> x;
int m;
for(int a=0;a<100;a++){
//入力
std::cin >> m;
x.push_back(m);
}
for(int a=0;a<100;a++){
//出力
std::cout << x[a];
}
}
挙げたらキリがないのでこの辺にしておきます。
精進方法
- 解説の動画を見よう
この一点に尽きると思います。本当に丁寧に解説してくださっています。
この場を借りてお礼を申し上げます。
問題を解く→解説PDFを見る→動画を見る→解法に沿って解いてみる
この流れで十分に力はついていくと思います。
終わりに
ということでn番煎じの記事を書いてみました。
読みづらいこと、この上ないですね...精進します。
ガバガバ知識ですごく強い競プロerに殴られそうで怖いですが、
ツッコミどころ等ございましたらご連絡お願いします。
追記(2020/7/5)
DaikiSuyama 様 よりご指摘いただきました。ありがとうございます。
-
ミスの修正
-
vectorについて
Vectorは割り当てられたメモリが足りなければ自動でメモリを確保するため、
上記の例のようなコードでは、push_backされる度にメモリの確保を行う。
そのため、resizeや初期宣言時に前もってメモリを確保しておかなければ、静的配列より低速になるらしい...