結果
| 問題 |
No.294 SuperFizzBuzz
|
| コンテスト | |
| ユーザー |
MoritaYasuaki
|
| 提出日時 | 2016-05-09 03:57:30 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
AC
|
| 実行時間 | 379 ms / 5,000 ms |
| コード長 | 1,101 bytes |
| コンパイル時間 | 304 ms |
| コンパイル使用メモリ | 22,144 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-05 13:03:54 |
| 合計ジャッジ時間 | 2,982 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 |
コンパイルメッセージ
main.c:38:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
38 | main(void) {
| ^~~~
main.c: In function ‘main’:
main.c:39:5: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
39 | scanf("%td\n", &N);
| ^~~~~~~~~~~~~~~~~~
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#define int ptrdiff_t
#define div lldiv
#define div_t lldiv_t
#define abs(a) ((a)<0?-(a):(a))
#define min(a,b) ((a)<(b)?(a):(b))
int N;
int conb(int n, int r) {
int p = 1;
int q = 0;
while (r--)
p=p*n--/++q;
return p;
}
int check(int a, int rank) {
int t = 0;
if (a%2 == 0) return 0;
while (rank--)
if (a & (1ULL << rank))
t++;
return t%3 == 0;
}
void print(int a, int rank) {
while (rank--)
if (a & (1ULL << rank))
putchar('5');
else
putchar('3');
printf("\n");
}
main(void) {
scanf("%td\n", &N);
int rank = 3;
for (rank = 3; ; rank++) {
int t = 0;
int nfive;
for (nfive = 3; nfive <= rank; nfive+=3)
t += conb(rank-1, nfive-1);
if (t < N) {
N-=t;
} else {
break;
}
}
int a=0;
do {
if (check(a, rank))
if (--N == 0)
break;
a++;
} while(1);
print(a, rank);
return 0;
}
MoritaYasuaki