zoukankan      html  css  js  c++  java
  • SJTU 1319. countColors

    题目描写叙述

    知道 psypaint 怎么用吗?在巫女系统全面普及的未来世界。非常少人会知道 psypaint 的使用方法。

    而身处在公安局作为监视官的朱同学。为了办案须要研究起了 psypaint 的使用方法。

    如今朱面前的显示屏上是 psypaint 的操作画面。画面上有一张纯白色画布,画布能够依据须要无限延伸。

    如今剪贴板里有一张 n*m 像素的图片,图片上有些像素有颜色。没颜色的地方则是透明的。

    颜色有 3 种,分别用 R,G,B 表示,而透明则用’ . ’表示。第一次粘贴操作,剪贴板会以画布(1,1)位置为图片的左上角把图片粘贴上去,第二次粘贴操作则以(2,2)为左上角。以此类推。注意到图片有颜色的地方会覆盖掉画布原有位置的颜色。而透明则显示的还是原来画布的颜色。如今朱同学不小心按了 T 次粘贴操作。请问 T 次操作之后颜色为 R,G,B 的像素各有多少个。

    输入格式

    第一行 n,m

    接下来是一个 n*m 的字符矩阵。描写叙述了剪贴板里的图片

    最后一行是 T

    输出格式

    一行输出 3 个数。用空格隔开为 R,G,B 颜色像素的数量。

    输入例子

    3 3
    ..G
    R..
    BG.
    3
    

    输出例子

    3 4 3
    

    数据约定

    对于 30%数据 T<=50

    对于全部数据保证 1<=n,m<=50,1<=T<=10^9

    思路:先动手写几个。发现规律,我们从斜线考虑。假设在出现R,G。B之前还没有出现‘.’的话,那么因为覆盖的话,那么这些将出现t次。然后就是先出现过像素的话。那么接下出现的像素不会被覆盖掉,所以也要考虑。至于都是空白的话,就是不考虑了

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    typedef long long ll;
    using namespace std;
    const int maxn = 60;
    
    int n, m, t;
    char g[55][55];
    ll ans[3];
    
    void deal(int x, int y) {
    	int flag = 0;
    	int tmp = 1;
    	while (g[x][y] != 0) {
    		if (flag) {
    			if (g[x][y] == '.') tmp++;
    			else {
    				if (g[x][y] == 'R') ans[0] += min(t, tmp);
    				else if (g[x][y] == 'G') ans[1] += min(t, tmp);
    				else if (g[x][y == 'B']) ans[2] += min(t, tmp);
    				tmp = 1;
    			}
    		} else if (g[x][y] != '.') {
    			if (g[x][y] == 'R') ans[0] += t;
    			else if (g[x][y] == 'G') ans[1] += t;
    			else if (g[x][y] == 'B') ans[2] += t;
    			flag = 1;
    		}
    		x++;
    		y++;
    	}
    }
    
    int main() {
    	while (scanf("%d%d", &n, &m) != EOF) {
    		memset(g, 0, sizeof(g));
    		memset(ans, 0, sizeof(ans));
    		for (int i = 0; i < n; i++)
    			scanf("%s", g[i]);
    		scanf("%d", &t);
    
    		for (int i = 0; i < n; i++) 
    			deal(i, 0);
    		for (int i = 1; i < m; i++)
    			deal(0, i);
    		printf("%lld %lld %lld
    ", ans[0], ans[1], ans[2]);
    	}
    	return 0;
    }


  • 相关阅读:
    运算符
    JS的基本概念和数据类型
    开源基于Canal的开源增量数据订阅&消费中间件
    用AntDeploy如何更新Agent
    AntDeploy发布前端项目到IIS(脱离vs单独使用)
    截图上传录屏gif上传工具推荐
    netcore开发windows普通服务(非Web)并一键发布到服务器
    一键发布部署vs插件[AntDeploy]开源了
    基于python的Elasticsearch索引的建立和数据的上传
    浅谈闭包
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7069045.html
Copyright © 2011-2022 走看看