题解 AT678 【この問題はほんとうにひどい問題であるため,できれば先に他の問題のほうをお楽しみいただければと思っておりまして,ですので他の問題を通し終えて暇になり,かつその暇を】

Xial 发布于 2019-09-16 4 次阅读


作为一名大自然的搬运工,我搬来了 java 的 AC 代码和某不官方的思路

  1. 首先,读取字体数据,并准备以 $3$ 度为步长从 $-15$ 度旋转到 $15$ 度的数据。
  2. 噪点通过中值滤波器消除,无法消除的噪声通过移除较小的连接组件消除。
  3. 对于每个连通块,将其与字体数据进行比较,然后选择匹配率最高的字符。同时,将字体数据调整到匹配输入字符的大小,然后进行比较。
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Random;

public class Main {
    static InputStream is;
    static PrintWriter out;
    static String INPUT = "";

    static long[][][] BURIED;
    static int REP = 50;

    static void solve() throws Exception
    {
        Random gen = new Random(1);

        int T = ni();
        double ROT;
        double SKEW;
        if(T < 30){
            ROT = 2;
            SKEW = 0;
            REP = 70;
        }else if(T < 90){
            ROT = 10;
            SKEW = 0.1;
            REP = 70;
        }else{
            ROT = 15;
            SKEW = 0.1;
            REP = 70;
        }
        BURIED = new long[16][REP][65];
        for(int i = 0;i < 16;i++){

            long[] BASE = new long[65];
            for(int j = 0;j < BURY[i].length;j++){
                for(int k = 0;k < BURY[i][j].length();k++){
                    if(BURY[i][j].charAt(k) == '#'){
                        BASE[j] |= 1L<<k;
                    }
                }
            }

            for(int rep = 0;rep < REP;rep++){
                long[] TO = new long[65];
//              double scale = gen.nextDouble()*0.2+0.8;
//              double wscale = (gen.nextDouble()*0.1+0.9)*scale;
//              double hscale = (gen.nextDouble()*0.1+0.9)*scale;
                double scale = gen.nextDouble()*0.1+0.9;
                double wscale = (gen.nextDouble()*0.1+0.9)*scale;
                double hscale = (gen.nextDouble()*0.1+0.9)*scale;
//              double slidex = gen.nextDouble()*10-5;
                double rot = (gen.nextDouble()*ROT*2-ROT)/180*Math.PI;
                double skewx = gen.nextDouble()*SKEW*2-SKEW;
                double skewy = gen.nextDouble()*SKEW*2-SKEW;
                double crot = Math.cos(rot);
                double srot = Math.sin(rot);
                for(int j = 0;j < 65;j++){
                    for(int k = 0;k < 38;k++){
                        if(BASE[j]<<63-k<0){
                            double y = j+0.5-32.5, x = k+0.5-19;
                            x *= wscale; y *= hscale;
                            double nx = x * crot - y * srot;
                            double ny = x * srot + y * crot;
                            x = nx; y = ny;
                            nx = x + skewy * y;
                            ny = y + skewx * x;
                            x = nx; y = ny;
                            int nj = (int)Math.round(y+32.5-0.5);
                            int nk = (int)Math.round(x+19-0.5);
                            if(nk >= 0 && nk < 38 && nj >= 0 && nj < 65){
                                TO[nj] |= 1L<<nk;
                            }
                        }
                    }
                }
                reduceNoise(TO);
                balanceW(TO);
                balanceH(TO);
                BURIED[i][rep] = TO;
            }
        }

        int m = ni(), n = ni();
        char[][] map = nm(n, m);
        reduceNoise(map);
//      for(char[] x : map){
//          tr(new String(x));
//      }

        int[] f = new int[m];
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                f[i] += map[j][i] == '#' ? 1 : 0;
            }
        }

        int[][] inters = new int[m][];
        int p = 0;
        for(int i = 0;i < m;i++){
            if(f[i] <= 1){
                int j;
                for(j = i+1;j < m && f[j] <= 1;j++);
                if(i > 0 && j < m){
                    inters[p++] = new int[]{i, j};
                }
                i = j-1;
            }
        }

        StringBuilder sb = new StringBuilder();
        if(p == 0){
            sb.append(recognize(0, m, map));
        }else{
            char x = recognize(0, inters[0][0]+inters[0][1]>>>1, map);
            if(x != 0)sb.append(x);
            for(int i = 0;i < p-1;i++){
                x = recognize(inters[i][0]+inters[i][1]>>>1, inters[i+1][0]+inters[i+1][1]>>>1, map);
                if(x != 0)sb.append(x);
            }
            x = recognize(inters[p-1][0]+inters[p-1][1]>>>1, m, map);
            if(x != 0)sb.append(x);
        }
//      tr(new String(str));
        out.println(new Parser4().eval(sb.toString().toCharArray()));
    }

    static char[] D = "0123456789()+-*/".toCharArray();

    static void balanceW(long[] map)
    {
        int sumf = 0;
        int g = 0;
        for(long x : map){
            for(int i = 0;i < 38;i++){
                if(x<<63-i<0){
                    g += i;
                    sumf++;
                }
            }
        }
        int center = (2*g+sumf)/(2*sumf);
        for(int i = 0;i < 65;i++){
            if(center < 19){
                map[i]<<=19-center;
            }else{
                map[i]>>>=center-19;
            }
        }
    }

    static void balanceH(long[] map)
    {
        int sumf = 0;
        int g = 0;
        for(int i = 0;i < 65;i++){
            int f = Long.bitCount(map[i]);
            g += i*f;
            sumf += f;
        }
        int center = (2*g+sumf)/(2*sumf);
        if(center < 32){
            for(int i = 65-1-(32-center);i >= 0;i--){
                map[i+32-center] = map[i];
            }
            for(int i = 32-center-1;i >= 0;i--)map[i] = 0;
        }else{
            for(int i = center-32;i < 65;i++){
                map[i-(center-32)] = map[i];
            }
            for(int i = 65-(center-32);i < 65;i++)map[i] = 0;
        }
    }

    static char recognize(int l, int r, char[][] map)
    {
        if(r-l < 10)return 0;
        long[] expanded = new long[65];
        int offset = (r-l-38)/2+l;
        for(int i = 0;i < 65;i++){
            for(int j = 0;j < 38;j++){
                if(j+offset >= l && j+offset < r && map[i][j+offset] == '#'){
                    expanded[i] |= 1L<<j;
                }
            }
        }
//      for(int i = 0;i < 65;i++){
//          for(int j = 0;j < 38;j++){
//              double x = (j+0.5)/38.*(r-l)-0.5;
//              double vote = 0;
//              int fx = (int)Math.floor(x);
//              double ww = 0;
//              for(int k = fx;k <= fx+1;k++){
//                  double lw = 1-(x-k)*(x-k);
//                  ww += lw;
//                  if(l+k >= 0 && l+k < map[0].length){
//                      if(map[i][l+k] == '#')vote += lw;
//                  }
//              }
//              if(vote >= ww/2){
//                  expanded[i] |= 1L<<j;
//              }
//          }
//      }
        balanceW(expanded);
        balanceH(expanded);

        int maxi = -1;
        int maxmat = -1;
        for(int i = 0;i < 16;i++){
            for(int u = 0;u < REP;u++){
                int mat = 0;
                for(int j = 0;j < 65;j++){
                    mat += 38-Long.bitCount(expanded[j]^BURIED[i][u][j]);
                }
//              if(i == 0){
//                  for(long x : BURIED[i][u]){
//                      tr(Long.toBinaryString(x|1L<<38).substring(1));
//                  }
//              }
                if(mat > maxmat){
                    maxmat = mat;
                    maxi = i;
                }
            }
        }
//      tr(l, r, D[maxi], maxmat, (double)maxmat/38/65);
//      if((double)maxmat/38/65 < 0.9){
//          for(long x : expanded){
//              tr(Long.toBinaryString(x|1L<<38).substring(1));
//          }
////            for(long x : BURIED[8][0]){
////                tr(Long.toBinaryString(x|1L<<38).substring(1));
////            }
//      }
//      System.exit(1);
        return D[maxi];
    }

    static void reduceNoise(char[][] map)
    {
        int n = map.length, m = map[0].length;
//      int[] S = {0, 100, 71, 58, 50, 45, 41, 38, 35};
//      int[] S = {0, 100, 50, 33, 25, 20, 17, 14, 13};
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                int b = 0, w = 0;
                for(int k = -2;k <= 2;k++){
                    for(int l = -2;l <= 2;l++){
//                      if(k == 0 && l == 0)continue;
                        if(i+k >= 0 && i+k < n && j+l >= 0 && j+l < m){
                            if(map[i+k][l+j] == '#'){
                                b+=100/(k*k+l*l+1);
                            }else{
                                w+=100/(k*k+l*l+1);
//                              w+=S[k*k+l*l];
                            }
                        }
                    }
                }
                // roughly
                if(map[i][j] == '#' && w > b){
                    map[i][j] = '.';
                }else if(map[i][j] == '.' && b > w){
                    map[i][j] = '#';
                }
//              if(map[i][j] == '#' && w >= 8*b){
//                  map[i][j] = '.';
//              }else if(map[i][j] == '.' && b >= 3*w){
//                  map[i][j] = '#';
//              }
            }
        }
    }

    static void reduceNoise(long[] map)
    {
//      int[] S = {0, 100, 50, 33, 25, 20, 17, 14, 13};
//      int[] S = {0, 100, 71, 58, 50, 45, 41, 38, 35};
        for(int i = 0;i < 65;i++){
            for(int j = 0;j < 38;j++){
                int b = 0, w = 0;
                for(int k = -2;k <= 2;k++){
                    for(int l = -2;l <= 2;l++){
                        if(k == 0 && l == 0)continue;
                        if(i+k >= 0 && i+k < 65 && j+l >= 0 && j+l < 38){
                            if(map[i+k]<<63-(l+j)<0){
                                b+=100/(k*k+l*l+1);
                            }else{
                                w+=100/(k*k+l*l+1);
                            }
                        }
                    }
                }
                // roughly
                if(map[i]<<63-j<0 && w > b){
                    map[i] ^= 1L<<j;
                }else if(map[i]<<63-j>=0 && b > w){
                    map[i] ^= 1L<<j;
                }
            }
        }
    }

    public static class Parser4 {
        // exp = exp2 ([+-] exp2)*
        // exp2 = exp3 ([*/] exp3)*
        // exp3 = exp4 | '(' exp ')'
        // exp4 = -*digit+{[\.]digit+}
        // digit = [0-9]
        char[] str;
        int pos;
        int n;

        public int eval(char[] str) throws Exception
        {
            this.str = str;
            pos = 0;
            n = this.str.length;
            int ret = exp();
            if(pos < n)throw new AssertionError(-1);
            return ret;
        }

        public int exp() throws Exception
        {
            int v = exp2();
            while(pos < n && (str[pos] == '+' || str[pos] == '-')){
                char op = str[pos];
                pos++;
                if(pos >= n)throw new AssertionError(pos);
                int w = exp2();
                if(op == '+'){
                    v += w;
                }else{
                    v -= w;
                }
            }
            return v;
        }

        public int exp2() throws Exception
        {
            int v = exp3();
            while(pos < n && (str[pos] == '*' || str[pos] == '/')){
                char op = str[pos];
                pos++;
                if(pos >= n)throw new AssertionError(pos);
                int w = exp3();
                if(op == '*'){
                    v *= w;
                }else{
                    if(w == 0)throw new AssertionError(pos);
                    v /= w;
                }
            }
            return v;
        }

        public int exp3() throws Exception
        {
            if(pos < n && str[pos] == '('){
                pos++;
                int v = exp();
                if(!(pos < n && str[pos] == ')'))throw new AssertionError(pos);
                pos++;
                return v;
            }else{
                return exp4();
            }
        }

        public int exp4() throws Exception
        {
            boolean minus = false;
            while(pos < n && str[pos] == '-'){
                minus = !minus;
                pos++;
            }
            boolean present = false;
            int v = 0;
            while(pos < n && str[pos] >= '0' && str[pos] <= '9'){
                v = v * 10 + digit();
                present = true;
            }
            if(!present)throw new AssertionError(pos);
            if(minus)v = -v;
            return v;
        }

        public int digit() throws Exception
        {
            if(pos == n)throw new AssertionError(pos);
            return str[pos++] - '0';
        }
    }

    public static void main(String[] args) throws Exception
    {
        long S = System.currentTimeMillis();
        is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes());
        out = new PrintWriter(System.out);

        solve();
        out.flush();
        long G = System.currentTimeMillis();
        tr(G-S+"ms");
    }

    private static boolean eof()
    {
        if(lenbuf == -1)return true;
        int lptr = ptrbuf;
        while(lptr < lenbuf)if(!isSpaceChar(inbuf[lptr++]))return false;

        try {
            is.mark(1000);
            while(true){
                int b = is.read();
                if(b == -1){
                    is.reset();
                    return true;
                }else if(!isSpaceChar(b)){
                    is.reset();
                    return false;
                }
            }
        } catch (IOException e) {
            return true;
        }
    }

    private static byte[] inbuf = new byte[1024];
    static int lenbuf = 0, ptrbuf = 0;

    private static int readByte()
    {
        if(lenbuf == -1)throw new InputMismatchException();
        if(ptrbuf >= lenbuf){
            ptrbuf = 0;
            try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
            if(lenbuf <= 0)return -1;
        }
        return inbuf[ptrbuf++];
    }

    private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
//  private static boolean isSpaceChar(int c) { return !(c >= 32 && c <= 126); }
    private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

    private static double nd() { return Double.parseDouble(ns()); }
    private static char nc() { return (char)skip(); }

    private static String ns()
    {
        int b = skip();
        StringBuilder sb = new StringBuilder();
        while(!(isSpaceChar(b))){
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }

    private static char[] ns(int n)
    {
        char[] buf = new char[n];
        int b = skip(), p = 0;
        while(p < n && !(isSpaceChar(b))){
            buf[p++] = (char)b;
            b = readByte();
        }
        return n == p ? buf : Arrays.copyOf(buf, p);
    }

    private static char[][] nm(int n, int m)
    {
        char[][] map = new char[n][];
        for(int i = 0;i < n;i++)map[i] = ns(m);
        return map;
    }

    private static int[] na(int n)
    {
        int[] a = new int[n];
        for(int i = 0;i < n;i++)a[i] = ni();
        return a;
    }

    private static int ni()
    {
        int num = 0, b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    private static long nl()
    {
        long num = 0;
        int b;
        boolean minus = false;
        while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
        if(b == '-'){
            minus = true;
            b = readByte();
        }

        while(true){
            if(b >= '0' && b <= '9'){
                num = num * 10 + (b - '0');
            }else{
                return minus ? -num : num;
            }
            b = readByte();
        }
    }

    static String[][] BURY = {
        {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "...............########...............",
            ".............############.............",
            "...........################...........",
            "..........##################..........",
            ".........####################.........",
            "........######################........",
            ".......########################.......",
            ".......##########....##########.......",
            "......#########........#########......",
            "......########..........########......",
            ".....#########..........#########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....########............########.....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            "....########..............########....",
            ".....########............########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....#########..........#########.....",
            "......########..........########......",
            "......#########........#########......",
            ".......##########....##########.......",
            ".......########################.......",
            "........######################........",
            ".........####################.........",
            "..........##################..........",
            "...........################...........",
            ".............############.............",
            "...............########...............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "...................####...............",
            ".................#######..............",
            "..............##########..............",
            "...........#############..............",
            "........################..............",
            ".......#################..............",
            ".......#################..............",
            ".......#################..............",
            ".......#################..............",
            "........######..########..............",
            "........###.....########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            "................########..............",
            ".......##########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            ".......##########################.....",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "..............#########...............",
            "...........##############.............",
            "........###################...........",
            ".......#####################..........",
            "......#######################.........",
            "......#######################.........",
            "......########################........",
            "......#########......#########........",
            "......#######.........#########.......",
            "......#######..........########.......",
            "......#######..........########.......",
            "......#######..........########.......",
            "......#######..........########.......",
            ".......######..........########.......",
            "......................#########.......",
            "......................########........",
            ".....................#########........",
            "....................##########........",
            "...................##########.........",
            "..................###########.........",
            ".................###########..........",
            "................###########...........",
            "...............###########............",
            "..............###########.............",
            ".............###########..............",
            "............###########...............",
            "...........###########.....#####......",
            "..........###########.....#######.....",
            ".........###########......#######.....",
            "........###########.......#######.....",
            ".......###########........#######.....",
            "......###########.........#######.....",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            "......###########################.....",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "..............##########..............",
            "..........################............",
            "........####################..........",
            ".......######################.........",
            ".......#######################........",
            ".......########################.......",
            ".......########################.......",
            ".......########.......##########......",
            ".......#######.........#########......",
            ".......#######..........########......",
            ".......#######..........########......",
            "........######..........########......",
            "........................########......",
            "........................########......",
            ".......................########.......",
            "......................#########.......",
            "...............###############........",
            "..............###############.........",
            "..............##############..........",
            "..............###############.........",
            "..............################........",
            "...............################.......",
            "......................##########......",
            "........................########......",
            "........................#########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            "........................#########.....",
            ".......###.............##########.....",
            "......########........##########......",
            "......##########################......",
            "......#########################.......",
            ".....##########################.......",
            "......########################........",
            "......######################..........",
            ".........#################............",
            "............###########...............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            ".....................#####............",
            "....................#######...........",
            "...................########...........",
            "..................#########...........",
            ".................##########...........",
            "................###########...........",
            "................###########...........",
            "...............############...........",
            "..............#############...........",
            ".............##############...........",
            "............###############...........",
            "...........################...........",
            "...........########.#######...........",
            "..........########..#######...........",
            ".........########...#######...........",
            "........########....#######...........",
            ".......#########....#######...........",
            ".......########.....#######...........",
            "......########......#######...........",
            ".....########.......#######...........",
            "....##############################....",
            "....##############################....",
            "....##############################....",
            "....##############################....",
            "....##############################....",
            "....##############################....",
            "...................########...........",
            "...................########...........",
            "...................########...........",
            "...................########...........",
            "...................########...........",
            "...................########...........",
            ".............####################.....",
            "............#####################.....",
            "............#####################.....",
            "............#####################.....",
            "............#####################.....",
            ".............####################.....",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "........######################........",
            "........#######################.......",
            "........#######################.......",
            "........#######################.......",
            "........#######################.......",
            "........######################........",
            "........#######.......................",
            "........#######.......................",
            "........#######.......................",
            "........#######.......................",
            "........#######.......................",
            "........#######.......................",
            ".......########..########.............",
            ".......####################...........",
            ".......######################.........",
            ".......#######################........",
            ".......########################.......",
            ".......########################.......",
            ".......#########################......",
            ".......########.......##########......",
            "..........##...........#########......",
            "........................#########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            ".........................########.....",
            "........#...............#########.....",
            ".......####............#########......",
            "......########.......###########......",
            "......##########################......",
            "......#########################.......",
            ".....#########################........",
            "......#######################.........",
            ".......#####################..........",
            ".........#################............",
            ".............##########...............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            ".........................######.......",
            "....................###########.......",
            ".................###############......",
            "...............#################......",
            ".............###################......",
            "............####################......",
            "...........####################.......",
            "..........################............",
            ".........############.................",
            "........###########...................",
            "........#########.....................",
            ".......#########......................",
            ".......########.......................",
            "......########........................",
            "......########........................",
            "......#######....########.............",
            "......#######..#############..........",
            ".....#########################........",
            ".....##########################.......",
            ".....###########################......",
            ".....###########################......",
            ".....############......##########.....",
            ".....##########.........#########.....",
            ".....#########...........#########....",
            ".....########.............########....",
            ".....########.............########....",
            ".....########.............########....",
            "......#######.............########....",
            "......#######.............########....",
            "......########...........#########....",
            "......#########.........#########.....",
            ".......##########.....###########.....",
            "........#########################.....",
            "........########################......",
            ".........######################.......",
            "..........####################........",
            "...........##################.........",
            ".............##############...........",
            "................########..............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......###########################.....",
            "......############################....",
            "......############################....",
            "......############################....",
            "......############################....",
            "......###########################.....",
            "......#######...........#########.....",
            "......#######...........#########.....",
            "......#######..........#########......",
            "......#######..........#########......",
            "......#######..........########.......",
            "......#######.........#########.......",
            "......#######.........########........",
            "......#######........#########........",
            ".......#####.........#########........",
            ".....................########.........",
            "....................#########.........",
            "....................########..........",
            "...................#########..........",
            "...................########...........",
            "..................#########...........",
            "..................#########...........",
            "..................########............",
            ".................#########............",
            ".................########.............",
            "................#########.............",
            "................########..............",
            "................########..............",
            "...............########...............",
            "...............########...............",
            "..............#########...............",
            "..............########................",
            "..............########................",
            ".............########.................",
            ".............########.................",
            ".............#######..................",
            ".............#######..................",
            "...............#####..................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "...............#########..............",
            ".............#############............",
            "...........#################..........",
            "..........###################.........",
            ".........#####################........",
            "........#######################.......",
            "........#######################.......",
            "........#########.....#########.......",
            ".......#########.......#########......",
            ".......########.........########......",
            ".......########.........########......",
            ".......########.........########......",
            ".......########.........########......",
            ".......########.........########......",
            "........########.......########.......",
            "........#########.....#########.......",
            ".........#####################........",
            "..........###################.........",
            "...........#################..........",
            "...........#################..........",
            ".........#####################........",
            "........#######################.......",
            ".......#########......##########......",
            "......########..........########......",
            "......########..........#########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....#########..........#########.....",
            ".....#########..........#########.....",
            "......##########......##########......",
            "......##########################......",
            ".......########################.......",
            ".......########################.......",
            "........######################........",
            ".........####################.........",
            "...........################...........",
            "..............##########..............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "..............#########...............",
            "............#############.............",
            "..........#################...........",
            ".........###################..........",
            "........#####################.........",
            ".......#######################........",
            "......########################........",
            "......##########......#########.......",
            "......#########........#########......",
            ".....#########..........########......",
            ".....########............#######......",
            ".....########............#######......",
            ".....########............########.....",
            ".....########............########.....",
            ".....########............########.....",
            ".....#########..........#########.....",
            "......########.........##########.....",
            "......##########......###########.....",
            ".......##########################.....",
            ".......##########################.....",
            "........#########################.....",
            ".........########################.....",
            "...........############..########.....",
            ".............########....#######......",
            ".........................#######......",
            "........................########......",
            "........................########......",
            ".......................########.......",
            "......................#########.......",
            "....................##########........",
            "..................############........",
            "..............###############.........",
            ".........###################..........",
            "........###################...........",
            "........##################............",
            "........################..............",
            "........##############................",
            "........############..................",
            ".........######.......................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            ".......................####...........",
            "......................######..........",
            "....................########..........",
            "...................##########.........",
            "..................###########.........",
            ".................############.........",
            "................############..........",
            "...............###########............",
            "..............###########.............",
            ".............###########..............",
            ".............##########...............",
            "............##########................",
            "............#########.................",
            "...........#########..................",
            "...........########...................",
            "..........#########...................",
            "..........########....................",
            ".........#########....................",
            ".........########.....................",
            ".........########.....................",
            ".........########.....................",
            "........#########.....................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            "........########......................",
            ".........########.....................",
            ".........########.....................",
            ".........########.....................",
            ".........#########....................",
            "..........########....................",
            "..........#########...................",
            "..........#########...................",
            "...........#########..................",
            "...........##########.................",
            "............#########.................",
            ".............#########................",
            ".............##########...............",
            "..............###########.............",
            "...............###########............",
            "................###########...........",
            ".................############.........",
            "..................###########.........",
            "...................##########.........",
            "....................#########.........",
            ".....................#######..........",
            ".......................####...........",
            ".........................#............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "...........####.......................",
            "..........######......................",
            ".........#########....................",
            ".........##########...................",
            ".........###########..................",
            ".........############.................",
            "..........############................",
            "............###########...............",
            ".............###########..............",
            "..............##########..............",
            "...............##########.............",
            "................##########............",
            ".................#########............",
            "..................#########...........",
            "...................########...........",
            "...................#########..........",
            "....................########..........",
            "....................#########.........",
            ".....................########.........",
            ".....................########.........",
            ".....................########.........",
            ".....................#########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            "......................########........",
            ".....................########.........",
            ".....................########.........",
            ".....................########.........",
            "....................#########.........",
            "....................########..........",
            "...................#########..........",
            "...................#########..........",
            "..................#########...........",
            ".................##########...........",
            "................##########............",
            "................#########.............",
            "..............###########.............",
            ".............###########..............",
            "............###########...............",
            "...........###########................",
            ".........############.................",
            ".........###########..................",
            ".........##########...................",
            ".........#########....................",
            "..........#######.....................",
            "...........####.......................",
            "............#.........................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            ".................#####................",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "......###########################.....",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            "................#######...............",
            ".................#####................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......##########################......",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            ".....############################.....",
            "......###########################.....",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            ".................####.................",
            "................######................",
            "................#######...............",
            "...............########...............",
            "...............########...............",
            "................#######...............",
            "................######................",
            ".......#####....######.....####.......",
            ".......######...######...#######......",
            "......#########..#####.#########......",
            "......###############.##########......",
            "......##########################......",
            "......##########################......",
            ".......########################.......",
            "............##############............",
            "...............########...............",
            "..............###########.............",
            ".............#############............",
            "...........########.#######...........",
            "..........########..########..........",
            "..........########..#########.........",
            ".........########....########.........",
            ".........########....########.........",
            "..........#######.....#######.........",
            "...........#####......######..........",
            "............###.........##............",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            },
            {
            "......................................",
            "......................................",
            "......................................",
            "...........................####.......",
            "...........................######.....",
            "..........................#######.....",
            "..........................#######.....",
            ".........................########.....",
            ".........................#######......",
            "........................########......",
            "........................#######.......",
            ".......................########.......",
            ".......................#######........",
            "......................########........",
            "......................#######.........",
            ".....................########.........",
            ".....................########.........",
            ".....................#######..........",
            "....................########..........",
            "....................#######...........",
            "...................########...........",
            "...................#######............",
            "..................########............",
            "..................#######.............",
            ".................########.............",
            ".................#######..............",
            "................########..............",
            "................#######...............",
            "...............########...............",
            "...............#######................",
            "...............#######................",
            "..............########................",
            "..............#######.................",
            ".............########.................",
            ".............#######..................",
            "............########..................",
            "............#######...................",
            "...........########...................",
            "...........#######....................",
            "..........########....................",
            "..........#######.....................",
            ".........########.....................",
            ".........#######......................",
            "........########......................",
            "........########......................",
            "........#######.......................",
            ".......########.......................",
            ".......#######........................",
            "......########........................",
            "......#######.........................",
            ".....########.........................",
            ".....#######..........................",
            "......######..........................",
            ".......#####..........................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................",
            "......................................"
            }
    };

    private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); }
}
最后更新于 2022-09-16