zoukankan      html  css  js  c++  java
  • zoj 2312

    //昨天练习感觉很不错,把大二他们虐了。不是赢在时间上,而是赢在题量上。
    //这道题我组是第一个解出来的,因此还让我们上台讲解题目。
    //刚拿到这道题时根本没想,直接得出结论,这是一道很简单的模拟题。
    //AC完之后听他们说这道题目很长,当时根本没想到。
    //下面开始贴代码
    
    #include<stdio.h>
    #include<string.h>
    
    #define MAXSIZE 80
    char map[MAXSIZE][MAXSIZE];
    int sizex,sizey;
    
    void setpoint(int x,int y,char c){
    	if(map[y][x]==' ')map[y][x]=c;
    	else if(map[y][x]==c)return;
    	else if((map[y][x]=='-'||map[y][x]=='+'||map[y][x]=='|')&&
    		(c=='-'||c=='+'||c=='|'))map[y][x]='+';
    	else if((map[y][x]=='/'||map[y][x]=='x'||map[y][x]=='\\')&&
    		(c=='/'||c=='\\'||c=='x'))map[y][x]='x';
    	else map[y][x]='*';
    }
    void line(void){
    	int x1,x2,y1,y2,i;
    	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    	if(x1==x2){
    		if(y1>y2){
    			i=y1;
    			y1=y2;
    			y2=i;
    		}
    		for(i=y1;i<=y2;++i)setpoint(x1,i,'|');
    	}else if(y1==y2){
    		if(x1>x2){
    			i=x1;
    			x1=x2;
    			x2=i;
    		}
    		for(i=x1;i<=x2;++i)setpoint(i,y1,'-');
    	}else if(x2-x1==y2-y1){
    		if(x1>x2){
    			i=x1;
    			x1=x2;
    			x2=i;
    		}
    		if(y1>y2){
    			i=y1;
    			y1=y2;
    			y2=i;
    		}
    		while(x1<=x2){
    			setpoint(x1,y1,'\\');
    			++x1;++y1;
    		}
    	}else if(x2-x1+y2-y1==0){
    		if(x1>x2){
    			i=x1;
    			x1=x2;
    			x2=i;
    		}
    		if(y1>y2){
    			i=y1;
    			y1=y2;
    			y2=i;
    		}
    		while(x1<=x2){
    			setpoint(x1,y2,'/');
    			++x1;--y2;
    		}
    	}
    }
    void point(void){
    	int x,y;
    	scanf("%d%d",&x,&y);
    	setpoint(x,y,'o');
    }
    void text(void){
    	int x,y,i;
    	char str[1023];
    	scanf("%d%d%s",&x,&y,str);
    	for(i=0;str[i]&&i+x<=sizex;++i)setpoint(i+x,y,str[i]);
    }
    void clear(void){
    	int x1,x2,y1,y2,i,j;
    	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    	if(x1>x2){
    		i=x1;
    		x1=x2;
    		x2=i;
    	}
    	if(y1>y2){
    		i=y1;
    		y1=y2;
    		y2=i;
    	}
    	for(i=y1;i<=y2;++i)for(j=x1;j<=x2;++j)map[i][j]=' ';
    }
    void print(void){
    	int i,j;
    	printf("+");
    	for(i=1;i<=sizex;++i)printf("-");
    	printf("+\n");
    	for(i=1;i<=sizey;++i){
    		printf("|");
    		for(j=1;j<=sizex;++j)putchar(map[i][j]);
    		printf("|\n");
    	}
    	printf("+");
    	for(i=1;i<=sizex;++i)printf("-");
    	printf("+\n");
    }
    int main(){
    	char str[255];
    	int i,j,cas=0;
    	//freopen("C:/Users/lenovo/Desktop/stdin.txt","r",stdin);
    	//freopen("C:/Users/lenovo/Desktop/stdout.txt","w",stdout);
    	while(2==scanf("%d%d",&sizex,&sizey) && sizex>0 && sizey>0){
    		for(i=1;i<=sizey;++i)for(j=1;j<=sizex;++j)
    			map[i][j]=' ';
    		while(1){
    			scanf("%s",str);
    			if(strcmp(str,"LINE")==0)line();
    			else if(strcmp(str,"POINT")==0)point();
    			else if(strcmp(str,"TEXT")==0)text();
    			else if(strcmp(str,"CLEAR")==0)clear();
    			else if(strcmp(str,"PRINT")==0){
    				print();
    				break;
    			}
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    
    
  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/zhanhb/p/2005713.html
Copyright © 2011-2022 走看看