?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
87538227 |
Contestant: skittles1412 |
1382B - 7 | Java 11 | Accepted | 218 ms | 30552 KB | 2020-07-21 17:51:27 | 2020-07-21 19:52:11 |
import java.io.OutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.io.IOException; import java.util.InputMismatchException; import java.io.InputStreamReader; import java.io.BufferedOutputStream; import java.util.StringTokenizer; import java.io.Closeable; import java.io.BufferedReader; import java.io.InputStream; import java.io.Flushable; /** * Built using CHelper plug-in * Actual solution is at the top */ public class Main { static class TaskAdapter implements Runnable { @Override public void run() { InputStream inputStream = System.in; OutputStream outputStream = System.out; Input in = new Input(inputStream); Output out = new Output(outputStream); BSequentialNim solver = new BSequentialNim(); int testCount = Integer.parseInt(in.next()); for(int i = 1; i<=testCount; i++) solver.solve(i, in, out); out.close(); } } public static void main(String[] args) throws Exception { Thread thread = new Thread(null, new TaskAdapter(), "", 1<<29); thread.start(); thread.join(); } static class BSequentialNim { int n; int[] arr; int[] memo; public BSequentialNim() { } public boolean dp(int x) { if(x==n) { return false; }else if(memo[x]!=-1) { return memo[x]==1; } boolean ans = !dp(x+1); if(arr[x]!=1) { ans |= dp(x+1); } memo[x] = ans ? 1 : 0; return ans; } public void solve(int testNumber, Input in, Output pw) { n = in.nextInt(); arr = new int[n]; memo = new int[n]; for(int i = 0; i<n; i++) { arr[i] = in.nextInt(); } Arrays.fill(memo, -1); if(dp(0)) { pw.println("First"); }else { pw.println("Second"); } } } static class Output implements Closeable, Flushable { public StringBuilder sb; public OutputStream os; public int BUFFER_SIZE; public boolean autoFlush; public String LineSeparator; public Output(OutputStream os) { this(os, 1<<16); } public Output(OutputStream os, int bs) { BUFFER_SIZE = bs; sb = new StringBuilder(BUFFER_SIZE); this.os = new BufferedOutputStream(os, 1<<17); autoFlush = false; LineSeparator = System.lineSeparator(); } public void println(String s) { sb.append(s); println(); if(autoFlush) { flush(); }else if(sb.length()>BUFFER_SIZE >> 1) { flushToBuffer(); } } public void println() { sb.append(LineSeparator); } private void flushToBuffer() { try { os.write(sb.toString().getBytes()); }catch(IOException e) { e.printStackTrace(); } sb = new StringBuilder(BUFFER_SIZE); } public void flush() { try { flushToBuffer(); os.flush(); }catch(IOException e) { e.printStackTrace(); } } public void close() { flush(); try { os.close(); }catch(IOException e) { e.printStackTrace(); } } } static class Input { BufferedReader br; StringTokenizer st; public Input(InputStream is) { this(is, 1<<20); } public Input(InputStream is, int bs) { br = new BufferedReader(new InputStreamReader(is), bs); st = null; } public boolean hasNext() { try { while(st==null||!st.hasMoreTokens()) { String s = br.readLine(); if(s==null) { return false; } st = new StringTokenizer(s); } return true; }catch(Exception e) { return false; } } public String next() { if(!hasNext()) { throw new InputMismatchException(); } return st.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } } }
?
?
?
?