パソコンに10万以上使ったけど、ワードとかエクセル使ったり、レポートの文章書くのに使ってるくらいでなんか勿体無いな〜・もっと「それっぽいこと」したいな〜って人向けにおすすめがあります。
結論:競技プログラミング(Atcoder)
まず
これ(https://qiita.com/jamjamjam/items/e066b8c7bc85487c0785)を元に、これ(https://atcoder.jp/contests/practice/tasks/practice_1 )を解きます。
atcoderの「コードテスト」や「提出」の部分で試せます。
プログラミング言語の基本的な書き方はネットで調べてると出てきます。
エディター(後述)がなくても↑くらいの問題なら解けます。試してみてください。
言語はpythonがとっつきやすいと思います。
そしたら、簡単な問題をどんどん解いて、難しい問題はしゃあなしで答え見て理解して、その後それを見ずに自分でコードを書けたら最高ですね。
コツは1つだけあって、自力分からないところがあればググることです。基本的な事はマジで全部ネットで記事になっています。「考えても分からないとき・忘れたけど思い出せない時はググる」ってのがそのうち自然になると思います。
エディターとは
例えば、これ(https://www.sublimetext.com)です。有名なのはVScodeです。
簡単にいうと、コードを書くためのメモ帳のことです。
ぶっちゃけ詳しくなくてこだわりないなら↑のやつを、何も考えずインストールするのが早いです。
競技プログラミングの良さ
面白い
まず、これ自体が面白いです。
受験数学の大問解くのが好きな人なんかは好きかもですね。
一応言っておくと、めっちゃ賢くて自分で鋭い視点からなんか見つける必要はないです。(そういう要素のある問題もありますが)誰でも解法というか、有名なアルゴリズムをいくつか習えばある程度問題は解けるようになります。
主観ですが、
初心者=プログラミング言語の基本と簡単な算数・数学ができる
初中級者=動的計画法とか、貪欲法とかを理解していて、基本的なものなら(多少調べながら)実装できる。プログラミング言語の扱いが分からない時、他人に聞いたり自分で調べて解決する。
中級者=基本的なものなら、調べずに実装できる。計算速度なんかも気にする。
上級者=ある程度の問題は見たら「ああ、こうすれば良いだろうな」ってすぐわかる。制限時間が何時間もある問題を解いたり、何かしらの予選に出たりする。
インターンやバイトでアピールできる
中上級者なら、技術力を売りに時給のいいバイトをできたり、就活の時にアピールできたりします。
また、1つ何かをしっかり身につければ、他の技術も身につきやすいでしょう。
即戦力が求められるベンチャー・スタートアップと呼ばれる企業にも入りやすいと思います。
パソコンに詳しくなる
やっていくうちにパソコンとかに興味が出てくるので詳しくなる確率が高いと思います。周りを見てると。
問題解説
この問題はせっかく公式解説がなかったので、解説してみます。(あんま解説になってないけど、、)
pythonは配列[a,b,c,d]があったとき、0番目がa、1番目がbって感じで、0から数えます。以下で日本語で書いている1番、2番ってやつは、全て1から始まる数え方(普通の日常の数え方)だけを書いています。
N = int(input())
CP = [map(int, input().split()) for _ in range(N)]
C, P = [list(i) for i in zip(*CP)]
Q = int(input())
LR = [map(int, input().split()) for _ in range(Q)]
L, R = [list(i) for i in zip(*LR)]
#以上が入力です
sum1,sum2=[],[]#1組、2組それぞれの累積得点を後で記録するための空配列。
#都合のため、range(N)でなく最初だけ処理を分けています。
if C[0] == 1:#生徒1番が、1組なら、
sum1.append(P[0])#配列sum1に、要素(生徒1番の点数)を追加。
sum2.append(0)##配列sum2には、要素(0)を追加。
#例えば、もし生徒1番が70点をとっていれば、sum1=[70],sum2=[0]になる。
else:#生徒1番が、2組なら、
sum1.append(0)
sum2.append(P[0])
for i in range(1,N):#生徒2番からN番の点数を見る
if C[i] == 1:#生徒i+1番が1組なら、
sum1.append(sum1[i-1]+P[i])#i+1番までかつ1組に属している生徒の総得点をsum1に追加。
sum2.append(sum2[i-1])#sum2にsum2の一番最後の要素と同じ要素を追加する。
else:
sum1.append(sum1[i-1])
sum2.append(sum2[i-1]+P[i])
#sum1[100]=1から100番目の生徒の内、1組に属する生徒の得点の総和
#になっている
for i in range(Q):
if L[i] == 1:
print(sum1[R[i]-1],sum2[R[i]-1])#1番目からR[i]番目の生徒の得点の総和
else:
print(sum1[R[i]-1]-sum1[L[i]-2],sum2[R[i]-1]-sum2[L[i]-2])
#(1番目からR[i]番目の生徒の得点の総和)-(L[i]-1番目からR[i]番目の生徒の得点の総和)
# = L[i]番目からR[i]番目の生徒の得点の総和
コメント