PC/UVa 题号: 110105/10267 Graphical Editor (图形化编辑器)题解
#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 (图形化编辑器)题解的更多相关文章
- PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
, '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...
- PC/UVa 题号: 110104/706 LC-Display (液晶显示屏)题解
#include <string> #include <iostream> #include <cstring> #include <algorithm> ...
- 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 ...
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem E: Graphical Editor(模拟控制台命令形式修改图形)
Problem E: Graphical Editor Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2 Solved: 2[Submit][Statu ...
- ACM YTU 《挑战编程》第一章 入门 Problem E: Graphical Editor
Description Graphical editors such as Photoshop allow us to alter bit-mapped images in the same way ...
- uva题库爬取
每次进uva都慢的要死,而且一步一步找到自己的那个题目简直要命. 于是,我想到做一个爬取uva题库,记录一下其中遇到的问题. 1.uva题目的链接是一个外部的,想要获取https资源,会报出SNIMi ...
- Asp.Net Core 使用Monaco Editor 实现代码编辑器
在项目中经常有代码在线编辑的需求,比如修改基于Xml的配置文件,编辑Json格式的测试数据等.我们可以使用微软开源的在线代码编辑器Monaco Editor实现这些功能.Monaco Editor是著 ...
- 天大acm 题号1002 Maya Calendar
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现.从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法.这 个Haab历 ...
- The Trip PC/UVa IDs: 110103/10137, Popularity: B, Success rate: average Level: 1
#include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...
随机推荐
- pl/sql developer 连接本地ORACLE 11g 64位数据库
1.登录PL/SQL Developer 这里省略Oracle数据库和PL/SQL Developer的安装步骤,注意在安装PL/SQL Developer软件时,不要安装在Program Files ...
- 搭建LAMP测试环境
LAMP:Linux+Apache+Mysql+Php,组合统称为LAMP,关于其中的独立个体,这里就不多介绍了. 1.首先准备一下软件包,如下: mysql-5.0.22.tar.gz httpd- ...
- c# List<int> 转 string 以及 string [] 转 List<int>
List<int> 转 string : list<int>: 1,2,3,4,5,6,7 转换成字符串:“1,2,3,4,5,6,7” List<int> li ...
- javascript的setTimeout()用法总结,js的setTimeout()方法
引子 js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经 ...
- 《Python基础教程(第二版)》学习笔记 -> 第十一章 文件和素材
打开文件 open函数用来打开文件,语句如下: open(name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后后返回一个文件对象.模式(mode)和缓冲 ...
- mvc JavaScriptResult的用法
一.JavaScriptResult在MVC中的定义的代码片段 C# 代码 复制 public class JavaScriptResult : ActionResult { public o ...
- BestCoder Round #76 解题报告
DZY Loves Partition [思路] 贪心 [代码] #include <iostream> using namespace std; typedef long long ll ...
- POJ 2280&&hdu 1661
题意:给定平面上的N个点,属性分别标记为0和1,然后找一条直线,直线上的点全部溶解,一侧的1溶解,另一侧的0溶解.求出最多能溶解的点的个数. 思路:暴力枚举每个点,扫描线旋转.先做优化,如果一侧溶解0 ...
- php pdo
定义:PDO(PHP Data Object)是PHP5才支持的扩展,它为PHP访问各种数据库定义了一个轻量级的.一致性的接口. PDO是PHP5中的一个重大功能,PHP6中将只默认使用PDO来处理数 ...
- SQL Server 执行计划
当一个查询被提交时,发生了什么? 向SQL Server提交一个查询时,sever上的许多进程会在这个查询上开始工作. 这些进程的目标就是管理这个系统,使得这个查询可以选择,插入,更新,删除数据. 每 ...