Submission #534852


Source Code Expand

#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <utility>
#include <sys/time.h>

using namespace std;
typedef long long ll;

ll dp[64][64][64][2];
const ll INF = 1ll << 62;

ll solve() {
	ll N;
	cin >> N;
	int S = 1;
	for (int i = 0; ; ++i) {
		if ((1ll << i) > N) {
			S = i;
			break;
		}
	}
	for (int i = 0; i < 64; ++i) {
		for (int j = 0; j < 64; ++j) {
			for (int k = 0; k < 64; ++k) {
				dp[i][j][k][0] = INF;
				dp[i][j][k][1] = INF;
			}
		}
	}

	dp[0][0][0][0] = 0;
	for (int i = 0; i <= S; ++i) {
		for (int j = 0; j <= S; ++j) {
			for (int k = 0; k <= S; ++k) {
				if (dp[i][j][k][0] == INF && dp[i][j][k][1] == INF) continue;
				if ((N & (1L << i)) == 0) {
					dp[i + 1][j + 0][k + 0][0] = min(dp[i + 1][j + 0][k + 0][0], dp[i][j][k][0]);
					dp[i + 1][j + 0][k + 1][0] = min(dp[i + 1][j + 0][k + 1][0], dp[i][j][k][1]);
					dp[i + 1][j + 1][k + 1][0] = min(dp[i + 1][j + 1][k + 1][0], dp[i][j][k][0] + (1L << i));
					dp[i + 1][j + 1][k + 0][1] = min(dp[i + 1][j + 1][k + 0][1], dp[i][j][k][1] + (1L << i));
				} else {
					dp[i + 1][j + 0][k + 1][0] = min(dp[i + 1][j + 0][k + 1][0], dp[i][j][k][0]);
					dp[i + 1][j + 0][k + 0][1] = min(dp[i + 1][j + 0][k + 0][1], dp[i][j][k][1]);
					dp[i + 1][j + 1][k + 0][1] = min(dp[i + 1][j + 1][k + 0][1], dp[i][j][k][0] + (1L << i));
					dp[i + 1][j + 1][k + 1][1] = min(dp[i + 1][j + 1][k + 1][1], dp[i][j][k][1] + (1L << i));
				}
			}
		}
	}
	ll ans = INF;
	for (int i = 1; i <= S; ++i) {
		ans = min(ans, dp[S + 1][i][i][0]);
	}
	return ans;
}


int main() {
	int T;
	cin >> T;
	for (int i = 0; i < T; ++i) {
		cout << solve() << endl;
	}
}


Submission Info

Submission Time
Task H - Bit Count
User tomerun
Language C++11 (Clang++ 3.4)
Score 300
Code Size 1781 Byte
Status AC
Exec Time 169 ms
Memory 5016 KB

Judge Result

Set Name All
Score / Max Score 300 / 300
Status
AC × 9
Set Name Test Cases
All 00_sample.txt, 10_small_00.txt, 20_medium_01.txt, 20_medium_02.txt, 20_medium_03.txt, 30_large_04.txt, 30_large_05.txt, 30_large_06.txt, 80_power_of_2.txt
Case Name Status Exec Time Memory
00_sample.txt AC 35 ms 4896 KB
10_small_00.txt AC 86 ms 4772 KB
20_medium_01.txt AC 77 ms 4892 KB
20_medium_02.txt AC 81 ms 5016 KB
20_medium_03.txt AC 77 ms 4892 KB
30_large_04.txt AC 169 ms 4848 KB
30_large_05.txt AC 166 ms 4900 KB
30_large_06.txt AC 153 ms 4900 KB
80_power_of_2.txt AC 34 ms 4768 KB