#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<iterator>
#include<cstring>
#include<set>

using namespace std;
int m;
int n;
//bmp[y][x]
char bmp[251][251];

void swap_if_bigger(int& x, int& y)
{
    if(x>y)
        swap(x, y);
}

//I M N  Creates a new table M×N. All the pixels are colored in white (O)
void create()
{
    scanf("%d %d", &m, &n);
    memset(bmp, 'O', sizeof(bmp));
}

//C  Clears the table. The size remains the same. All the pixels became white (O).
void clear()
{
    memset(bmp, 'O', sizeof(bmp));
}

//L X Y C    Colors the pixel with coordinates (X,Y) in colour C.
void draw_pixel()
{
    int x,y;
    char color;
    scanf("%d %d %c", &x, &y, &color);
    bmp[y][x]=color;
}

//V X Y1 Y2 C    Draws the vertical segment in the column X between the rows Y1 and Y2 inclusive in colour C.
void draw_ver_seg()
{
    int x, y1, y2;
    char c;
    scanf("%d %d %d %c", &x, &y1, &y2, &c);
    swap_if_bigger(y1, y2);
    for(int y=y1;y<=y2;y++)
    {
        bmp[y][x]=c;
    }
}

//H X1 X2 Y C    Draws the horizontal segment in the row Y between the columns X1 and X2 inclusive in colour C.
void draw_hor_seg()
{
    int x1, x2, y;
    char c;
    scanf("%d %d %d %c", &x1, &x2, &y, &c);
    swap_if_bigger(x1, x2);
    for(int x=x1;x<=x2;x++)
    {
        bmp[y][x]=c;
    }
}

//K X1 Y1 X2 Y2 C    Draws the filled rectangle in colour C. (X1,Y1) is the upper left corner, (X2,Y2) is the lower right corner of the rectangle.
void draw_rect()
{
    int x1, y1, x2, y2;
    char c;
    scanf("%d %d %d %d %c", &x1, &y1, &x2, &y2, &c);
    swap_if_bigger(x1, x2);
    swap_if_bigger(y1, y2);
    for(int x=x1;x<=x2;x++)
        for(int y=y1;y<=y2;y++)
        {
            bmp[y][x]=c;
        }
}

//F X Y C    Fills the region with the colour C. The region R to be filled is defined as follows. The pixel (X,Y) belongs to this region. The other pixel belongs to the region R if and only if it has the same colour as pixel (X,Y) and a common side with any pixel which belongs to this region.
void _fill_region(int x, int y, char c)
{
    char old_color=bmp[y][x];
    if(old_color==c)
        return;
    bmp[y][x]=c;
    static int direction[4][2]={
        {-1, 0},
        {1, 0},
        {0, -1},
        {0, 1},
    };

    for(int i=0;i<4;i++)
    {
        int nx=x+direction[i][0];
        int ny=y+direction[i][1];

        if(nx<1 || nx>m || ny<1 || ny>n)
            continue;

        if(bmp[ny][nx]==old_color)
        {
           // cout<<nx<<" "<<ny<<endl;
            _fill_region(nx, ny, c);
        }
    }

}

void fill_region()
{
    int x,y;
    char c;
    scanf("%d %d %c", &x, &y, &c);
    _fill_region(x, y, c);
}

//S Name     Writes the picture in the file Name.
void save()
{
    string filename;
    cin>>filename;
    cout<<filename<<endl;
    for(int y=1;y<=n;y++)
    {
        for(int x=1;x<=m;x++)
        {
            cout<<bmp[y][x];
        }
        cout<<endl;
    }
}

 

int main()
{
    char cmd;
    char line[256];
    while(cin>>cmd)
    {
        if(cmd=='X')
            break;
        switch(cmd)
        {
            case 'I':
                create();
                break;
            case 'C':
                clear();
                break;
            case 'L':
                draw_pixel();
                break;
            case 'V':
                draw_ver_seg();
                break;
            case 'H':
                draw_hor_seg();
                break;
            case 'K':
                draw_rect();
                break;
            case 'F':
                fill_region();
                break;
            case 'S':
                save();
                break;
            default:
                gets(line);
                continue;
        }

    }

    return 0;
}

PC/UVa 题号: 110105/10267 Graphical Editor (图形化编辑器)题解的更多相关文章

  1. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版

    , '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...

  2. PC/UVa 题号: 110104/706 LC-Display (液晶显示屏)题解

    #include <string> #include <iostream> #include <cstring> #include <algorithm> ...

  3. PC/UVa 题号: 110101/100 The 3n+1 problem (3n+1 问题)

     The 3n + 1 problem  Background Problems in Computer Science are often classified as belonging to a ...

  4. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem E: Graphical Editor(模拟控制台命令形式修改图形)

    Problem E: Graphical Editor Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2  Solved: 2[Submit][Statu ...

  5. ACM YTU 《挑战编程》第一章 入门 Problem E: Graphical Editor

    Description Graphical editors such as Photoshop allow us to alter bit-mapped images in the same way ...

  6. uva题库爬取

    每次进uva都慢的要死,而且一步一步找到自己的那个题目简直要命. 于是,我想到做一个爬取uva题库,记录一下其中遇到的问题. 1.uva题目的链接是一个外部的,想要获取https资源,会报出SNIMi ...

  7. Asp.Net Core 使用Monaco Editor 实现代码编辑器

    在项目中经常有代码在线编辑的需求,比如修改基于Xml的配置文件,编辑Json格式的测试数据等.我们可以使用微软开源的在线代码编辑器Monaco Editor实现这些功能.Monaco Editor是著 ...

  8. 天大acm 题号1002 Maya Calendar

    Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现.从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法.这 个Haab历 ...

  9. The Trip PC/UVa IDs: 110103/10137, Popularity: B, Success rate: average Level: 1

    #include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...

随机推荐

  1. 从投影的角度理解pca:向量,投影,基,内积,坐标,维数,分散程度,方差,协方差矩阵,对角化,特征值分解,主成分分析PCA

    参考:http://blog.csdn.net/songzitea/article/details/18219237

  2. 随机变量的方差variance & 随机向量的协方差矩阵covariance matrix

    1.样本矩阵 如果是一个随机变量,那么它的样本值可以用一个向量表示.相对的,如果针对一个随机向量,那么就需要利用矩阵表示,因为向量中的每一个变量的采样值,都可以利用一个向量表示. 然后,一个矩阵可以利 ...

  3. Ruby窗口程序

    require 'tk' tkroot=TkRoot.new { title 'hellw word' geometry '300x200' } lb = TkLabel.new(tkroot) do ...

  4. CodeSmith模板生成

    转:http://blog.csdn.net/jason_ldh/article/details/9887073 一.            工具设置 CodeSmith默认是不支持中文的,那么我们必 ...

  5. ecshop 二次开发及模板标签

    ecs_account_log // 用户账目日志表   ecs_activity // 活动表(代码,名称,开始,结束,描述)   ecs_ad // 广告表(位置,类型,名称,链接,图片,开始,结 ...

  6. 嵌入式 hi3518c平台网卡模式MII与RMII模式在Uboot和kernel中切换小结

    由于公司项目的需要,我们需要在原有的MII的基础上,修改为RMII模式,针对hi3518c平台,我的网卡是LAN8701需要修改的地方有如下几个: 首先我的uboot中env是: bootargs=m ...

  7. HDU 4638-Group(线段树+离线处理)

    题意: 给n个编号,m个查询每个查询l,r,求下标区间[l,r]中能分成标号连续的组数(一组内的标号是连续的) 分析: 我们认为初始,每个标号为一个组(线段树维护区间组数),从左向右扫序列,当前标号, ...

  8. HDU 5765 Bonds 巧妙状压暴力

    题意:给一个20个点无向连通图,求每条边被多少个极小割集包括 分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法) 然后就是奉上官方题解:http:// ...

  9. VS2010生成Qt程序图标修改方法

    转自:http://blog.csdn.net/simeone18/article/details/7344547 1.准备ico文件,nuistcard.ico 2.在nuistcard工程目录,建 ...

  10. ubuntu开发软件的安装

    今天下午发现ubuntu12.04坏了,无奈只能重新安装,建议读者配置自己的ubuntu后备份一个,免得坏了重新安装,花了两个小时才把ubuntu的交叉环境弄好,其中搭建了tptp通信协议,还有arm ...