ABC 068 B - Break Number 全探索の考え方。発想
全探索の考えかたが重要。考察問題。
整数操作も大事。
6 -> 1回 (6>3)
8 -> 3回 (8 > 4 > 2 > 1)
これらは、1からNまででループを回す考え方で解いてはいけない。
1から2倍していって、最大値がN以下の整数が答えである。
コード
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <queue> using namespace std; const int INF = 1e9; int main() { int N; cin >> N; int num = 1; while (1) { if (num * 2 > N) break; num *= 2; } cout << num; }
ABC 031 D - 語呂合わせ bit全探索 3進数
10進数から3進数に直すコードは以下の通りである
for (int bit = 0; bit < pow(3, k); bit++) { int tmp = 0; for (int i = 1; i <= k; i++) {//数字1からkまで len[i] = tmp % 3 + 1; tmp /= 3; } }
例として28なら、len={2,1,1,2,1,1} (1 + 27) と保存される。
未解決。