UVA - 201 Squares
2015-07-05 13:58
477 查看
//
很水的题 原来博客上的
//
很水的题 原来博客上的
//
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define MAX_SIZE 9+9+1 void GETS_MARK(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE]); void CALCULATE(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int COUNT[],int SIZE); void OUTPUT(int SIZE,int COUNT[]); int CALCULATE_1(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count); int CALCULATE_2(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count); int CALCULATE_3(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count); int CALCULATE_4(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count); int main() { int ROW[MAX_SIZE][MAX_SIZE],LINE[MAX_SIZE][MAX_SIZE],COUNT[MAX_SIZE]; int SIZE,i,j,count=0; char ch; while(scanf("%d",&SIZE)!=EOF) { memset(ROW,0,sizeof(ROW)); memset(LINE,0,sizeof(LINE)); memset(COUNT,0,sizeof(COUNT)); GETS_MARK(ROW,LINE); CALCULATE(ROW,LINE,COUNT,SIZE); if(count!=0) printf("\n**********************************\n\n"); printf("Problem #%d\n\n",++count); OUTPUT(SIZE,COUNT); } return 0; } void GETS_MARK(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE]) { int i,j,k,N; char ch; scanf("%d",&N);getchar(); for(k=1;k<=N;k++) { scanf("%c %d %d",&ch,&i,&j);getchar(); if(ch=='H')LINE[j][i]=1; if(ch=='V')ROW[i][j]=1; } } void CALCULATE(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int COUNT[],int SIZE) { int i,j,count; for(i=1;i<SIZE;i++){ for(j=1;j<SIZE;j++){ for(count=1;count<SIZE;count++){ int UP_ROW_RIGHT = CALCULATE_1(ROW,LINE,i,j,count); if(UP_ROW_RIGHT){ int UP_LINE_DOWN = CALCULATE_2(ROW,LINE,i,j,count); if(UP_LINE_DOWN){ int DOWN_LINE_UP = CALCULATE_3(ROW,LINE,i+count-1,j+count,count); if(DOWN_LINE_UP){ int DOWN_ROW_LEFT = CALCULATE_4(ROW,LINE,i+count,j+count-1,count); if(DOWN_ROW_LEFT){ COUNT[count]++; } } } } } } } } int CALCULATE_1(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count) { int MARK=0,END = j+count; while(j<END) { if(ROW[i][j]==1)MARK++;j++; } if(MARK==count)return 1; return 0; } int CALCULATE_2(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count) { int MARK=0,END = i+count; while(i<END) { if(LINE[i][j]==1)MARK++;i++; } if(MARK==count)return 1; return 0; } int CALCULATE_3(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count) { int MARK=0,END = i-count; while(i>END) { if(LINE[i][j]==1)MARK++;i--; } if(MARK==count)return 1; return 0; } int CALCULATE_4(int ROW[][MAX_SIZE],int LINE[][MAX_SIZE],int i,int j,int count) { int MARK=0,END = j-count; while(j>END) { if(ROW[i][j]==1)MARK++;j--; } if(MARK==count)return 1; return 0; } void OUTPUT(int SIZE,int COUNT[]) { int MARK=0; int i; for(i=1;i<SIZE;i++) { if(COUNT[i]!=0){printf("%d square (s) of size %d\n",COUNT[i],i);MARK=1;} } if(MARK==0)printf("No completed squares can be found.\n"); }
相关文章推荐
- leetCode 9.Palindrome Number (回文数字) 解题思路和方法
- js 定义构造函数
- *3Sum Closest
- linux程序设计——同时执行的线程(第十二章)
- C语言学习笔记:11_全局变量
- Unix Network 2
- XenApp_XenDesktop_7.6实战篇之十七:XenApp应用程序交付
- C语言学习笔记:10_函数_高级
- 招聘初级程序员必须考虑的6个因素
- C语言学习笔记:09_函数
- 重新认识C语言
- 6
- OpenCVR 有新成员 OpenCVV OpenCVC
- BZOJ3626 [LNOI2014]LCA
- C语言学习笔记:08_循环结构
- C语言学习笔记:07_交换两个数的多个方法
- Shell入门第一课
- java分布式通信系统(J2EE分布式服务器架构)
- Spring AOP
- C语言学习笔记:06_逻辑运算符和逻辑表达式