zoukankan      html  css  js  c++  java
  • [CF1495C] Garden of the Sun

    [CF1495C] Garden of the Sun - 构造

    Description

    太阳花田是一个 (n imes m) 的矩阵。X 的位置是空地,. 的位置是向日葵,Imakf 保证给出的矩阵满足所有 X 两两之间的切比雪夫距离大于 (1)(没有公共点)。请把一些 . 换成 X,使得所有的 X 四连通且不存在简单环(形成一棵树)。

    Solution

    总体想法是将 2,5,8,... 行全部涂黑,然后比如考虑 3,4 行,我们希望直接把第一列涂黑这样就连起来了,但是如果二者中有一个第二列已黑,这样就错了,但是这时候我们可以把第二列涂黑,也连起来了

    注意最后一行需要特判一下

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    
    const int N = 505;
    
    char a[N][N];
    
    int n, m;
    
    void solve()
    {
        cin >> n >> m;
    
        for (int i = 1; i <= n; i++)
            cin >> a[i] + 1;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                if (a[i][j] == 'X')
                    a[i][j] = 1;
                else
                    a[i][j] = 0;
        if (n == 1)
        {
            for (int i = 1; i <= m; i++)
                cout << 'X';
            cout << endl;
            return;
        }
        // todo: main
        for (int i = 2; i <= n; i += 3)
        {
            for (int j = 1; j <= m; j++)
                a[i][j] = 1;
            char *b = a[i + 1];
            char *c = a[i + 2];
            if (i + 2 <= n)
                if (b[2] || c[2])
                    b[2] = 1, c[2] = 1;
                else
                    b[1] = 1, c[1] = 1;
        }
        if (n % 3 == 1)
        {
            for (int i = 1; i <= m; i++)
                if (a[n][i] && !a[n][i - 1] && !a[n][i + 1] && !a[n - 1][i + 1] && !a[n - 1][i - 1])
                    a[n - 1][i] = 1;
        }
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                if (a[i][j])
                    a[i][j] = 'X';
                else
                    a[i][j] = '.';
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
                cout << a[i][j];
            cout << endl;
        }
        for (int i = 1; i <= n + 2; i++)
            for (int j = 1; j <= m + 2; j++)
                a[i][j] = 0;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
  • 相关阅读:
    java类加载机制
    java反射
    java注解
    设计模式 单例模式
    #1015 : KMP算法
    idea 快捷键
    基础数据类型综合
    工厂模式 VS 策略模式
    AtomicI 多线程中的原子操作
    ThreadLocal<T>
  • 原文地址:https://www.cnblogs.com/mollnn/p/14664511.html
Copyright © 2011-2022 走看看