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 ...
随机推荐
- FFmpeg介绍及参数详细说明
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...
- UIView 设置alpha后, 子view也随着变化alpha, 解决方法
// _closeContainerBar.alpha = 0.7; _closeContainerBar.backgroundColor = [[UIColor blackColor] ...
- ORACLE 全局索引和本地索引
Oracle数据库中,有两种类型的分区索引,全局索引和本地索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引.下面就分别看看每种类型的索引各自的特点. 全局索引以整个表的数据为对象建立索引,索引 ...
- Mybatis学习——一对多关联表查询
1.实体类 public class Student { private int id; private String name; } public class Classes { private i ...
- 【转】u盘不显示盘符
转自http://jingyan.baidu.com/article/f3ad7d0fd0793e09c3345b31.html 我的情况: 电脑只有一个c盘,插入u盘,u盘的盘符为d. 弹出u盘,但 ...
- UVALive 4255 Guess
这题竟然是图论···orz 题意:给出一个整数序列a1,a2,--,可以得到如下矩阵 1 2 3 4 1 - + 0 + 2 + + + 3 - - 4 + &quo ...
- JTA事务管理--配置剖析(二)
Spring引用Tomcat的 JTA事务 Tomcat是Servlet容器,但它提供了JNDI的实现,因此用户可以象在Java EE应用程序服务器中一样,在Tomcat中使用JNDI查找JD ...
- [C++]cin读取回车键
最近碰到一个问题,就是从控制台读取一组数,如: 12 23 34 56 若是使用 int data; while ( cin >> data ) {//...} 当回车后,不能有效转换到后 ...
- iBeacon开发
什么是iBeacons iBeacons是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精准微定位技术,当你的手持设备靠 ...
- 利用原生JavaScript获取样式的方式小结
来源:http://www.ido321.com/930.html ps:是获取样式,不是设置样式.若没有给元素设置样式值,则返回浏览器给予的默认值.(论坛整理) 1.element.style:只能 ...