結果
問題 | No.2067 ±2^k operations |
ユーザー |
👑 |
提出日時 | 2022-08-29 22:15:46 |
言語 | C (gcc 13.3.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,874 bytes |
コンパイル時間 | 1,702 ms |
コンパイル使用メモリ | 30,976 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-06 19:22:36 |
合計ジャッジ時間 | 4,254 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 8 WA * 4 RE * 11 |
ソースコード
#include <stdio.h>long long bit[61];long long solve(long long N){int i, j, jj, jjj, k, kk, kkk, cur, prev;long long dp[2][15][3][3] = {}, ans = 0;for (i = 60; (N & bit[i]) == 0; i--);dp[0][0][2][0] = 1;for (i--, k = 0, kk = 0, kkk = 1, cur = 1, prev = 0; i >= 0; i--, cur ^= 1, prev ^= 1) {for (j = 0; j <= 12; j++) for (jj = 0; jj <= 2; jj++) for (jjj = 0; jjj <= 2; jjj++) dp[cur][j][jj][jjj] = 0;for (j = 0; j <= 12; j++) {dp[cur][j+1][2][0] += dp[prev][j][0][1];dp[cur][j][0][2] += dp[prev][j][0][1];dp[cur][j][1][0] += dp[prev][j][0][2];dp[cur][j][0][2] += dp[prev][j][0][2];dp[cur][j+2][2][0] += dp[prev][j][1][0];dp[cur][j+1][0][2] += dp[prev][j][1][0];dp[cur][j][2][0] += dp[prev][j][2][0];dp[cur][j][0][1] += dp[prev][j][2][0];}if ((N & bit[i]) == 0) {if (kk == 0) {if (kkk == 1) {k++;kk = 2;kkk = 0;} else {kk = 1;kkk = 0;}} else if (kk == 1) {k += 2;kk = 2;}} else {if (kk == 0) {if (kkk == 1) dp[cur][k+1][2][0]++;else dp[cur][k][1][0]++;} else if (kk == 1) dp[cur][k+2][2][0]++;else dp[cur][k][2][0]++;if (kk == 0) {if (kkk == 1) kkk = 2;} else if (kk == 1) {k++;kk = 0;kkk = 2;} else {kk = 0;kkk = 1;}}}if (kk == 0) {if (kkk == 1) ans += k + 1;else ans += k + 2;} else if (kk == 1) ans += k + 2;else ans += k;for (j = 0; j <= 12; j++) {ans += dp[prev][j][0][1] * (j + 1);ans += dp[prev][j][0][2] * (j + 2);ans += dp[prev][j][1][0] * (j + 2);ans += dp[prev][j][2][0] * j;}return ans;}int main(){int T;long long N;scanf("%d", &T);int i;for (i = 1, bit[0] = 1; i <= 60; i++) bit[i] = bit[i-1] << 1;while (T--) {scanf("%lld", &N);printf("%lld\n", solve(N));}fflush(stdout);return 0;}