zoukankan      html  css  js  c++  java
  • Image Is Everything LA2995

    白书第一章例题6

    构造。思维。几何。

    分别从几个角度去看,有矛盾就删掉,最后遍历一下统计个数

    方法证明:第一个方块肯定要删除。假设前k个必须删除,第k+1个矛盾出现,假如不删掉,矛盾将持续存在,故必须删掉。

    代码有很多细节。

    比如注意宏定义加()  //#define REP(i,n) for(int i=0;i<(n);i++)

    #include<iostream>
    using namespace std;
    #define REP(i,n) for(int i=0;i<(n);i++)
    int n;
    char read_char() {
        char c;
        for (;; ) {
            c = getchar();
            if ((c >= 'A'&&c <= 'Z') || c == '.') return c;
    
        }
    }
    
    void get(int k, int i, int j, int p, int &x, int &y, int &z) {
        if (k == 0) { x = p; y = j; z = i; }
        if (k == 1) { x = n - 1 - j; y = p; z = i; }
        if (k == 2) { x = n - 1 - p; y = n - 1 - j; z = i; }
        if (k == 3) { x = j; y = n - p - 1; z = i; }
        if (k == 4) { x = n - 1 - i; y = j; z = p; }
        if (k == 5) { x = i; y = j; z = n - 1 - p; }
    }
    ;
    char view[6][10][10], pos[10][10][10];
    int main() {
    
        while (cin >> n) {
            if (n == 0)break;
            REP(i, n) REP(k, 6) REP(j, n) view[k][i][j] = read_char();
            REP(i, n) REP(j, n) REP(k, n) pos[i][j][k] = '#';
    
            REP(k, 6) REP(i, n) REP(j, n) if (view[k][i][j] == '.') { REP(p, n) { int x, y, z; get(k, i, j, p, x, y, z); pos[x][y][z] = '.'; } };
    
            for (;;) {
    
                bool done = true;
                REP(i, n)REP(j, n)REP(k, 6) if (view[k][i][j]!='.' ) {
                    REP(p, n) {
                        int x, y, z;
                        get(k, i, j, p, x, y, z);
                        if (pos[x][y][z] == '.') continue;
                        if (pos[x][y][z] == '#') { pos[x][y][z] = view[k][i][j]; break; }
    
    
                    if (pos[x][y][z] == view[k][i][j]) break;
                    pos[x][y][z] = '.';
                    done = false;
                }
                }
                if (done) break;
            }
            int ans = 0;
            REP(i, n)REP(j, n)REP(k, n)
                if (pos[i][j][k] != '.') ans++;
            printf("Maximum weight: %d gram(s)
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    VS Code 快捷键(中英文对照版)
    一些网络资源
    VS Code插件
    Angular for TypeScript 语法快速指南 (基于2.0.0版本)
    Angular2 中的依赖包详解
    《ECMAScript 6 入门》阮一峰
    《JavaScript 标准参考教程》阮一峰
    Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器
    由angular命令行工具(angular-cli)生成的目录和文件
    Angular 4.x 修仙之路
  • 原文地址:https://www.cnblogs.com/lqerio/p/9860918.html
Copyright © 2011-2022 走看看