結果
| 問題 | 
                            No.142 単なる配列の操作に関する実装問題
                             | 
                    
| コンテスト | |
| ユーザー | 
                             古寺いろは
                         | 
                    
| 提出日時 | 2015-04-04 08:14:14 | 
| 言語 | C++11(廃止可能性あり)  (gcc 13.3.0)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                            (最新)
                                AC
                                 
                             
                            (最初)
                            
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,407 bytes | 
| コンパイル時間 | 1,335 ms | 
| コンパイル使用メモリ | 159,752 KB | 
| 実行使用メモリ | 14,016 KB | 
| 最終ジャッジ日時 | 2024-07-04 01:43:04 | 
| 合計ジャッジ時間 | 14,594 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 4 TLE * 1 | 
コンパイルメッセージ
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 move 5
int main() {
	int N, S, X, Y, Z;
	scanf("%d %d %d %d %d", &N, &S, &X, &Y, &Z);
	int pre = S;
	int BIT = (1 << move) - 1;
	for (int i = 0; i < N; i++)
	{
		int abase = i >> move;
		int apos = i & BIT;
		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 >> move;
		sp = sk & BIT;
		tb = tk >> move;
		tp = tk & BIT;
		ub = uk >> move;
		up = uk & BIT;
		vb = vk >> move;
		vp = vk & BIT;
		for (int i = ub; i <= vb; i++)
		{
			C[i - ub] = 0;
		}
		int cp = up;
		int cb = 0;
		for (int i = sb; i <= tb; i++)
		{
			int target = BIT;
			if (i == tb) target = tp;
			while (sp <= target){
				int len = min(target - sp + 1, BIT - cp + 1);
				C[cb] |= (((1UL << len) - 1) & (A[i] >> sp)) << cp;
				sp += len;
				cp += len;
				if (cp > BIT){
					cb++;
					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 >> move;
		int p = i & BIT;
		if ((A[b] >> p) & 1) printf("O");
		else printf("E");
	}
	printf("\n");
}
            
            
            
        
            
古寺いろは