UVA201(p96)----Squares
2016-02-29 17:27
525 查看
#include<bits/stdc++.h> #define debu using namespace std; int n,m,cas=0; int r[20][20],c[20][20]; void solve() { int l,all=0; for(l=1; l<=n; l++) { int num=0,flag; for(int i=1; i+l<=n; i++) for(int j=1; j+l<=n; j++) { flag=1; for(int R=j; R<j+l; R++) if(!r[i][R]||!r[i+l][R]) flag=0; for(int C=i; C<i+l; C++) if(!c[C][j]||!c[C][j+l]) flag=0; num+=flag; } all+=num; if(num) printf("%d square (s) of size %d\n",num,l); } if(!all) printf("No completed squares can be found.\n"); } int main() { #ifdef debug freopen("in.in","r",stdin); #endif // debug while(scanf("%d%d\n",&n,&m)!=EOF) { cas++; if(cas!=1) printf("\n**********************************\n\n"); printf("Problem #%d\n\n",cas); memset(r,0,sizeof(r)); memset(c,0,sizeof(c)); for(int i=0; i<m; i++) { int x,y; char flag; scanf("%c%d%d\n",&flag,&x,&y); if(flag=='H') r[x][y]=1; else c[y][x]=1; } solve(); } return 0; }
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=4&page=show_problem&problem=137
题解:枚举每一点(i,j),判断从(i,j)到(i,j+l-1)和(i+l,j)到(i+l,j+l-1)(横行,竖行同)是否有边即可。注意竖行的y,x相反。
相关文章推荐
- C++的个人真实学习经验
- maven 安装 外部jar 命令
- mysql set names 命令和 mysql 字符编码问题
- crontab文件的真实位置
- 假期德国实践报告
- automaticallyAdjustsScrollViewInsets的作用
- [New learn] 设计模式思考
- 优先级队列
- sockaddr和sockaddr_in的区别
- 逃避问题只会出现更大的问题。
- jQuery 分页插件 jPages 使用
- 基于ZooKeeper大规模集群配置系统概述
- IP和子网掩码详解
- 记录最近面试时遇到的一个问题:Android root的原理
- 关于iOS NSDate的一些用法
- Tomcat网站发布配置说明
- jQuery取得select选择的文本与值
- HTML+CSS学习笔记(3)- 认识标签(2)
- 新浪云日志写法
- 《转》使用NSURLSession发送GET和POST请求