結果
問題 | No.142 単なる配列の操作に関する実装問題 |
ユーザー |
![]() |
提出日時 | 2015-04-19 14:18:52 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 1,277 ms / 5,000 ms |
コード長 | 5,264 bytes |
コンパイル時間 | 2,315 ms |
コンパイル使用メモリ | 79,772 KB |
実行使用メモリ | 40,732 KB |
最終ジャッジ日時 | 2024-07-04 18:09:41 |
合計ジャッジ時間 | 8,647 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 |
ソースコード
package no142;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.InputMismatchException;import java.util.NoSuchElementException;public class Main {static IO io = new IO();public static void main(String[] args) {int n = io.nextInt();int n2 = (n+63)/64;long[] a2 = new long[n2+2];long seed = io.nextLong();long x = io.nextLong();long y = io.nextLong();long z = io.nextLong();long a = seed;for(int i=0;i<n;i++) {a2[i/64] |= (long) (a%2) << (long) (i%64);a = (x * a + y) % z;}long[] temp = new long[n2+2];int q = io.nextInt();for(int qq=0;qq<q;qq++) {// debug(a2);int s = io.nextInt() - 1;int t = io.nextInt() - 1;int u = io.nextInt() - 1;io.nextInt(); // vint s2 = s / 64;int t2 = t / 64;int u2 = u / 64;System.arraycopy(a2, s2, temp, 0, t2-s2+1);temp[0] &= ~((1L<<(long) (s%64))-1);temp[t2-s2] &= t%64 == 63 ? -1 : (1L<<(long) (t%64+1))-1;temp[t2-s2+1] = temp[t2-s2+2] = 0;// debug(temp);long shift = ((u%64 - s%64)+64)%64;int shift2 = u%64 < s%64 ? 1 : 0;if (shift > 0) {for(int i=t2-s2;i>=0;i--) {temp[i+1] |= temp[i] >>> (64-shift);temp[i] <<= shift;}}// debug(temp);for(int i=0;i<=t2-s2+1;i++) {a2[u2+i] ^= temp[i+shift2];}}// debug(a2);for(int i=0;i<n;i++) {io.print((a2[i/64]>>(i%64) & 1) == 0 ? 'E' : 'O');}io.println();io.flush();}static void debug(long[] a) {if (a.length > 20) {a = Arrays.copyOf(a, 20);}StringBuilder sb = new StringBuilder();for(int i=0;i<a.length;i++) {for(int j=0;j<64;j++) {sb.append(a[i]>>j&1);}sb.append('|');}System.out.println(sb.toString());}}class IO extends PrintWriter {private final InputStream in;private final byte[] buffer = new byte[1024];private int ptr = 0;private int buflen = 0;public IO() { this(System.in);}public IO(InputStream source) { super(System.out); this.in = source;}private boolean hasNextByte() {if (ptr < buflen) {return true;}else{ptr = 0;try {buflen = in.read(buffer);} catch (IOException e) {e.printStackTrace();}if (buflen <= 0) {return false;}}return true;}private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}private static boolean isNewLine(int c) { return c == '\n' || c == '\r';}public boolean hasNext() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; return hasNextByte();}public boolean hasNextLine() { while(hasNextByte() && isNewLine(buffer[ptr])) ptr++; return hasNextByte();}public String next() {if (!hasNext()) {throw new NoSuchElementException();}StringBuilder sb = new StringBuilder();int b = readByte();while(isPrintableChar(b)) {sb.appendCodePoint(b);b = readByte();}return sb.toString();}public char[] nextCharArray(int len) {if (!hasNext()) {throw new NoSuchElementException();}char[] s = new char[len];int i = 0;int b = readByte();while(isPrintableChar(b)) {if (i == len) {throw new InputMismatchException();}s[i++] = (char) b;b = readByte();}return s;}public String nextLine() {if (!hasNextLine()) {throw new NoSuchElementException();}StringBuilder sb = new StringBuilder();int b = readByte();while(!isNewLine(b)) {sb.appendCodePoint(b);b = readByte();}return sb.toString();}public long nextLong() {if (!hasNext()) {throw new NoSuchElementException();}long n = 0;boolean minus = false;int b = readByte();if (b == '-') {minus = true;b = readByte();}if (b < '0' || '9' < b) {throw new NumberFormatException();}while(true){if ('0' <= b && b <= '9') {n *= 10;n += b - '0';}else if(b == -1 || !isPrintableChar(b)){return minus ? -n : n;}else{throw new NumberFormatException();}b = readByte();}}public int nextInt() {long nl = nextLong();if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) {throw new NumberFormatException();}return (int) nl;}public char nextChar() {if (!hasNext()) {throw new NoSuchElementException();}return (char) readByte();}public double nextDouble() { return Double.parseDouble(next());}public int[] nextIntArray(int n) { int[] a = new int[n]; for(int i=0;i<n;i++) a[i] = nextInt(); return a;}public long[] nextLongArray(int n) { long[] a = new long[n]; for(int i=0;i<n;i++) a[i] = nextLong(); return a;}public double[] nextDoubleArray(int n) { double[] a = new double[n]; for(int i=0;i<n;i++) a[i] = nextDouble(); return a;}public void nextIntArrays(int[]... a) { for(int i=0;i<a[0].length;i++) for(int j=0;j<a.length;j++) a[j][i] = nextInt();}public int[][] nextIntMatrix(int n,int m) { int[][] a = new int[n][]; for(int i=0;i<n;i++) a[i] = nextIntArray(m); return a;}public char[][] nextCharMap(int n,int m) { char[][] a = new char[n][]; for(int i=0;i<n;i++) a[i] = nextCharArray(m); return a;}public void close() { super.close(); try {in.close();} catch (IOException e) {}}}