結果
| 問題 |
No.142 単なる配列の操作に関する実装問題
|
| コンテスト | |
| ユーザー |
古寺いろは
|
| 提出日時 | 2015-04-04 08:28:13 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2,678 ms / 5,000 ms |
| コード長 | 1,346 bytes |
| コンパイル時間 | 1,226 ms |
| コンパイル使用メモリ | 159,636 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-04 01:45:19 |
| 合計ジャッジ時間 | 10,858 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:12:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
12 | scanf("%d %d %d %d %d", &N, &S, &X, &Y, &Z);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:24:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
24 | scanf("%d", &Q);
| ~~~~~^~~~~~~~~~
main.cpp:30:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
30 | scanf("%d %d %d %d", &sk, &tk, &uk, &vk);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"
using namespace std;
unsigned long long A[210000];
unsigned long long C[21000];
#define div 60
int main() {
int N, S, X, Y, Z;
scanf("%d %d %d %d %d", &N, &S, &X, &Y, &Z);
int pre = S;
for (int i = 0; i < N; i++)
{
int abase = i / div;
int apos = i % div;
if (pre % 2) A[abase] |= 1ULL << apos;
pre = (int)(((long long)X * pre + Y) % Z);
}
int Q;
scanf("%d", &Q);
for (int l = 0; l < Q; l++)
{
int sk, tk, uk, vk;
scanf("%d %d %d %d", &sk, &tk, &uk, &vk);
sk--; tk--; uk--; vk--;
int sb, sp, tb, tp, ub, up, vb, vp;
sb = sk / div;
sp = sk % div;
tb = tk / div;
tp = tk % div;
ub = uk / div;
up = uk % div;
vb = vk / div;
vp = vk % div;
int cp = up;
int cb = 0;
C[cb] = 0;
for (int i = sb; i <= tb; i++)
{
int target = div - 1;
if (i == tb) target = tp;
while (sp <= target){
int len = min(target - sp + 1, div - cp);
C[cb] |= (((1ULL << len) - 1ULL) & (A[i] >> sp)) << cp;
sp += len;
cp += len;
if (cp >= div){
cb++;
C[cb] = 0;
cp = 0;
}
}
sp = 0;
}
for (int i = ub; i <= vb; i++)
{
A[i] ^= C[i - ub];
}
}
for (int i = 0; i < N; i++)
{
int b = i / div;
int p = i % div;
if ((A[b] >> p) & 1ULL) printf("O");
else printf("E");
}
printf("\n");
}
古寺いろは