結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
Drakkon
|
| 提出日時 | 2018-02-21 17:52:24 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,450 bytes |
| コンパイル時間 | 355 ms |
| コンパイル使用メモリ | 31,872 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-18 18:22:32 |
| 合計ジャッジ時間 | 1,402 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 WA * 21 |
ソースコード
#include <stdio.h>
int bitCount(int m);
int numberOfDigits(int d);
int explore1(int e1);
int explore2(int e2, int n);
int main(void){
/*n:S[ i:萔 j:S[Õ}X*/
int n, i = 1, j = 1, t = 1;
scanf("%d", &n);
/*S[O܂ł̎萔𐔂*/
do{
if(j + bitCount(j) <= n){
j += bitCount(j);
i++;
}
else{
break;
}
}while(j < n);
/*o͂*/
if(j == n){
printf("%d\n", i);
}
else{
do{
j -= bitCount(j);
i++;
do{
j += bitCount(j);
i++;
if(j > n){
j = -1;
break;
}
else if(j == n){
break;
}
}while(j + bitCount(j) != explore1(n));
if(j <= 1){
break;
}
}while(0);
if(j <= 1){
printf("%d\n", -1);
}
else{
printf("%d\n", i);
}
}
return 0;
}
//iɂƂ1̐߂
int bitCount(int m){
int i = 1, count = 0;
if(m % 2 != 0){
count++;
m--;
}
while(i < m){
i *= 2;
}
if(i > m){
i /= 2;
}
while(m > 0){
m -= i;
i /= 2;
count++;
}
return count;
}
//iɂƂ̌߂
int numberOfDigits(int d){
int i = 1, j = 0;
while(i < d){
i *= 2;
}
if(i > d){
i /= 2;
}
while(i > 0){
i /= 2;
j++;
}
return j;
}
//nɂ}X납炳(nĂ)
//digits: t:e1 - iۑ
int explore1(int e1){
int i = 1, digits, t;
digits = numberOfDigits(e1);
while(i <= digits){
t = e1 - i;
if(t + bitCount(t) == e1){
return t;
break;
}
i++;
}
return -1;
}
//nɂ}Xɂ}XOT
//digits: t:e2 + iۑ n:Cn
int explore2(int e2, int n){
int i = 1, digits, t = 0;
digits = numberOfDigits(e2);
while(i <= digits || t <= n){
t = e2 + i;
if(t - bitCount(t) == e2){
return t;
break;
}
i++;
}
return -1;
}
Drakkon