• HDU 5319 Painter(2015多校联合)



    题目链接:戳我

    题目大意

    一个画笔在画板作画。画笔有两种颜色,且只有两种画法,/,即沿着对角线的方向,同理。只能是红色 R,/只能是蓝色 B。如果一个格子被B R个染一次,就变成绿色 G 。给一个最终状态的画布,求用最少几笔可以到达该最终状态。
    每个格子只能被相同颜色染一次,画家可以选择任意起点作为画笔起点。
    每一笔都是连续的。

    样例解释

    2
    4
    RR.B
    .RG.
    .BRR
    B..R

    解题思路

    简单题。以每个G为起点,/各扫一次,最后在扫描有多少连续的 R和/ B

    代码

    //Author LJH
    //www.cnblogs.com/tenlee
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cctype>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #define clc(a, b) memset(a, b, sizeof(a))
    using namespace std;
    
    const int inf = 0x3f;
    const int INF = 0x3f3f3f3f;
    const int maxn = 100;
    int movex[2][2] = {-1, -1, 1, 1};
    int movey[2][2] = {-1, 1,  1, -1};
    
    int n, m, g[maxn][maxn], ans;
    
    bool judge(int x, int y)
    {
        if(x < 1 || x > n || y < 1 || y > m) return  false;
        return true;
    }
    void findx(int x, int y)
    {
        int a = x, b = y;
        g[x][y] -= 1;
        while(judge(a, b))
        {
            a += movex[0][0];
            b += movex[0][1];
            if(g[a][b] == 2 || g[a][b] == 0) break;
            g[a][b] -= 1;
        }
        a = x, b = y;
        while(judge(a, b))
        {
            a += movex[1][0];
            b += movex[1][1];
            if(g[a][b] == 2 || g[a][b] == 0) break;
            g[a][b] -= 1;
        }
    
    }
    void findy(int x, int y)
    {
        g[x][y] -= 2;
        int a = x, b = y;
        while(judge(a, b))
        {
            a += movey[0][0];
            b += movey[0][1];
            if(g[a][b]  == 1 || g[a][b] == 0) break;
            g[a][b] -= 2;
        }
        a = x, b = y;
        while(judge(a, b))
        {
            a += movey[1][0];
            b += movey[1][1];
            if(g[a][b]  == 1 || g[a][b] == 0) break;
            g[a][b] -= 2;
        }
    }
    
    void Print()
    {
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                printf("%d", g[i][j]);
            }
            puts("");
        }
        puts("#####");
    }
    int main()
    {
        //freopen("1.in", "r", stdin);
        int T;
        char col[maxn];
        char ch;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
            clc(g, 0);
            ans = 0;
            for(int i = 1; i <= n; i++)
            {
                scanf(" %s", col);
                m = strlen(col);
                for(int j = 0; col[j]; j++)
                {   
                    ch = col[j];
                    if(ch == 'R') g[i][j+1] = 1;
                    if(ch == 'B') g[i][j+1] = 2;
                    if(ch == 'G') g[i][j+1] = 3;
                    if(ch == '.') g[i][j+1] = 0;
                }
            }
            //Print();
            for(int i = 1; i <=n ;i++)
            {
                for(int j = 1; j <= m; j++)
                {
                    if(g[i][j] == 3)
                    {
                        ans += 2;
                        findx(i, j);
                        findy(i, j);
                    }
                }
            }
            //Print();
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= m; j++)
                {
                    if(g[i][j] == 1)
                    {
                        ans++;
                        findx(i, j);
                        //Print();
                    }
                    if(g[i][j] == 2) 
                    {
                        ans++;
                        findy(i, j);
                        //Print();
                    }
                }
            }
            //Print();
            printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    Java 缩放图片工具类,创建缩略图、伸缩图片比例
    93、App Links (应用程序链接)实例
    92、App Permissions(权限管理)实例
    MAC系统教程网站
    Android MVP 详解
    Android开发中,那些让你相见恨晚的方法、类或接口
    用Ultra ISO制作启动U盘装系统
    DB2 Magazine 中文版: 访问 iSeries 数据
    Eclipse快捷键大全
    同步灵无线锂电鼠G11-580HX独特“五灵键”
  • 原文地址:https://www.cnblogs.com/tenlee/p/4684245.html
Copyright © 2020-2023  润新知