Algorithm
これを解いているときに「vectorから重複を削除する方法忘れちゃった~」となったので復習した。 atcoder.jp 方法1 : sort -> unique + erase 重複要素を線形探索するために sort しておく。 unique で隣接する重複要素を除いた要素を先頭に集める。 unique …
AtCoderで座標回転が出題されたときに苦労したので、ここで整理しておく。まず、以下のように記号を定める。 :回転前の座標 :回転後の座標 :反時計回りに回転させる角度すると、原点を中心とした反時計回りの回転はこのように計算できる。整理して...次に…
序 多重for文 を抜ける方法はいくつかあって、例えば各ループごとにbreak判定したり、goto文で飛ぶ。最近は Lambda式 でうまく抜ける方法を知ったので、AtCoderの過去問を解く際に使ってみた。 過去問 atcoder.jp 提出コード #include <iostream> #include <vector> int main()</vector></iostream>…
定番であるユークリッドの互除法で。 #include <stdio.h> int main() { unsigned int num1 = 1029; // GCDを求めたいペアのひとつ unsigned int num2 = 1071; // GCDを求めたいペアのひとつ // GCD計算 unsigned int a = num1; unsigned int b = num2; unsigned int r</stdio.h>…
結果 52点 (初級) 各問題の振り返り (解けたG問題まで) A問題 使えそうな関数をググって transform を使った。 ただし using namespace std; をすると名前空間で問題になることがあるみたい。いきなりハマって焦った。 参考 c++ - std::transform() and toup…
■やりたいこと 『正の整数 A, B について、Bを最低何倍すればA以上になるか。(答えは整数倍とする。)』を、 プログラムの整数除算(小数点以下切り捨て)で求めたい。たとえば、A = 7, B = 2 のときは 4 倍。 たとえば、A = 8, B = 4 のときは 2 倍。 (割…
#include <stdio.h> int main() { int end = 128; // 出力数 for (int n = 1; n < end; n++) { if (n % 15 == 0) { puts("FizzBuzz"); } else if (n % 3 == 0) { puts("Fizz"); } else if (n % 5 == 0) { puts("Buzz"); } else { printf("%d\n", n); } } return 0; } </stdio.h>…