結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
mmn15277198
|
| 提出日時 | 2021-03-07 20:40:10 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,198 bytes |
| コンパイル時間 | 1,224 ms |
| コンパイル使用メモリ | 106,756 KB |
| 実行使用メモリ | 6,816 KB |
| 最終ジャッジ日時 | 2024-10-09 03:45:32 |
| 合計ジャッジ時間 | 2,283 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 WA * 1 |
ソースコード
//#include <bits/stdc++.h>
#include <iostream> // cout, endl, cin
#include <string> // string, to_string, stoi
#include <vector> // vector
#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <utility> // pair, make_pair
#include <tuple> // tuple, make_tuple
#include <cstdint> // int64_t, int*_t
#include <cstdio> // printf
#include <map> // map
#include <queue> // queue, priority_queue
#include <set> // set
#include <stack> // stack
#include <deque> // deque
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <bitset> // bitset
#include <cctype> // isupper, islower, isdigit, toupper, tolower
#include <math.h>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> P;
typedef vector<int> vi;
typedef vector<bool> vb;
typedef vector<vector<int>> vvi;
typedef vector<long long> vll;
typedef vector<pair<int,int>> vP;
typedef vector<string> vs;
#define ext exit(0)
#define rep(i,n) for(int (i) = 0; (i) < (n); (i)++)
#define rep2(i,x,n) for(int (i) = (x); (i) < (n); (i)++)
#define pb push_back
#define eb emplace_back
#define all(x) x.begin() , x.end()
#define fi first
#define se second
#define Yes() {puts("YES");ext;}
#define No() {puts("No"); ext;}
#define ssz s.size()
#define tsz t.size()
const ll MOD = 1000000007;
//const ll MOD = 998244353;
const ld PI = 3.14159265358979;
const int INF = 1001001001;
const ll LINF = 1001001001001001001;
const int MX = 200005;//DP...?
int in () { int x; scanf("%d" , &x); return x; }
ll lin () { ll x; scanf("%lld" , &x); return x; }
template < typename T > void chmin (T &a , T b) { if (a > b) a = b; }
template < typename T > void chmax (T &a , T b) { if (a < b) a = b; }
template < typename T > T gcd (T a , T b) { if (a < b) swap(a , b); if (a % b == 0) return b; else return gcd (b , a % b); }
template < typename T > T lcm (T a , T b) { return (a / gcd (a , b) * b); }
template < typename T > T keta (T x) { int ret = 0; while (x) { x /= 10; ret++; } return ret; }
template < typename T > bool is_2POW (T x) { if ((x & (x - 1)) == 0) return true; else return false; }
bool is_prime (ll x) {
if (x == 1) return false;
if (x == 2 || x == 3 || x == 5 || x == 7) return true;
if((x & 1) == 0) return false;
for (ll i = 3; i * i <= x; i += 2) if(x % i == 0)return false;
return true;
}
void is_prime2 () {
const int sz = 10001; //使う時は外に出す
vb table(sz , 0); //使う時は外に出す
for (int i = 2; i < sz; i++) {
for(int j = 2; i * j < sz; j++) {
table[i * j] = true;
}
}
}
//mapの方が良い場合もある
void divisor (ll x) {
vector<int> ret;
for (int i = 2; i * i <= x; i++) {
while (x % i == 0) {
ret.push_back(i);
x /= i;
}
}
if (x > 1) ret.push_back(x);
}
ll modpow (ll x , ll p , ll m) {
ll ret = 1;
while (p > 0) {
if (p & 1) ret *= x;
x *= x;
x %= m;
p >>= 1;
}
return ret;
}
/** memo **/
//vs ans;
//int n;
//vi dp(n + 10 , 0);
//v.erase(unique(v.begin(), v.end()), v.end());
void solve() {
return;
}
int main() {
//cin.tie(0);
//ios::sync_with_stdio(false);
int n;
cin >> n;
vi a(n + 1);
rep2(i,1,n + 1) {
a[i] = __builtin_popcount(i);
}
vi dp(n + 100 , INF);
dp[0] = 0;
dp[1] = 1;
for (int i = 1; i <= n; i++) {
dp[i + a[i]] = min(dp[i + a[i]] , dp[i] + 1);
dp[i - a[i]] = min(dp[i - a[i]] , dp[i] + 1);
}
for (int i = 1; i <= n; i++) {
dp[i + a[i]] = min(dp[i + a[i]] , dp[i] + 1);
dp[i - a[i]] = min(dp[i - a[i]] , dp[i] + 1);
}
for (int i = 1; i <= n; i++) {
dp[i + a[i]] = min(dp[i + a[i]] , dp[i] + 1);
dp[i - a[i]] = min(dp[i - a[i]] , dp[i] + 1);
}
for (int i = 1; i <= n; i++) {
dp[i + a[i]] = min(dp[i + a[i]] , dp[i] + 1);
dp[i - a[i]] = min(dp[i - a[i]] , dp[i] + 1);
}
if (dp[n] == INF) {
cout << -1 << endl;
} else {
cout << dp[n] << endl;
}
return 0;
}
mmn15277198