結果

問題 No.2961 Shiny Monster Master
ユーザー tnakao0123
提出日時 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);
      |     ~~~~~^~~~~~~~~~~~~~~~~~

ソースコード

diff #

/* -*- 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;
}
0