結果
問題 |
No.2961 Shiny Monster Master
|
ユーザー |
![]() |
提出日時 | 2024-11-18 16:18:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 493 ms / 1,777 ms |
コード長 | 1,043 bytes |
コンパイル時間 | 463 ms |
コンパイル使用メモリ | 43,904 KB |
最終ジャッジ日時 | 2025-02-25 05:26:42 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 77 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:40:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 40 | scanf("%d%d", &r, &n); | ~~~~~^~~~~~~~~~~~~~~~ main.cpp:41:36: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 41 | for (int i = 0; i < n; i++) scanf("%d", as + i); | ~~~~~^~~~~~~~~~~~~~ main.cpp:52:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 52 | scanf("%d", &qn); | ~~~~~^~~~~~~~~~~ main.cpp:56:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 56 | scanf("%d%d", &li, &ri); | ~~~~~^~~~~~~~~~~~~~~~~~
ソースコード
/* -*- coding: utf-8 -*- * * 2961.cc: No.2961 Shiny Monster Master - yukicoder */ #include<cstdio> #include<algorithm> using namespace std; /* constant */ const int MAX_N = 100000; const int MAX_R = 1000000; const int BN = 30; /* typedef */ /* global variables */ int as[MAX_N]; int cs[MAX_R][BN]; /* subroutines */ int calc(int u, int v, int r) { int sum = 0; for (int i = BN - 1; i >= 0; i--) if (((v - u) >> i) & 1) { sum += cs[u % r][i]; u += (1 << i); } return sum; } /* main */ int main() { int r, n; scanf("%d%d", &r, &n); for (int i = 0; i < n; i++) scanf("%d", as + i); sort(as, as + n); for (int u = 0, i = 0; u < r && i < n; u++) if (u == as[i]) cs[u][0] = 1, i++; for (int i = 0, bi = 1; i < BN - 1; i++, bi <<= 1) for (int u = 0; u < r; u++) cs[u][i + 1] = cs[u][i] + cs[(u + bi) % r][i]; int qn; scanf("%d", &qn); while (qn--) { int li, ri; scanf("%d%d", &li, &ri); int s = calc(li, ri + 1, r); printf("%d\n", s); } return 0; }