結果

問題 No.142 単なる配列の操作に関する実装問題
ユーザー 古寺いろは古寺いろは
提出日時 2015-04-04 08:28:41
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2,418 ms / 5,000 ms
コード長 1,346 bytes
コンパイル時間 1,137 ms
コンパイル使用メモリ 158,832 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-07-04 01:45:34
合計ジャッジ時間 9,547 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 417 ms
5,248 KB
testcase_01 AC 1,875 ms
5,376 KB
testcase_02 AC 2,418 ms
5,376 KB
testcase_03 AC 409 ms
5,376 KB
testcase_04 AC 1,862 ms
5,376 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
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);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ソースコード

diff #

#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"
using namespace std;

unsigned long long A[210000];
unsigned long long C[21000];

#define div 63

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");
}
0