Ugly Windows
2016-02-05 10:54
453 查看
题意:
求没被覆盖的窗口
思路:
枚举暴力,遇到没判断过的类型就横向竖向扫描,然后看是否可以补全另外两条,最后还要判断内部是否含有
代码:
求没被覆盖的窗口
思路:
枚举暴力,遇到没判断过的类型就横向竖向扫描,然后看是否可以补全另外两条,最后还要判断内部是否含有
代码:
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 100+10; char win[maxn][maxn]; int v[30]; int w, l; bool judge(int x, int y, int k, int q) { if(k-y<2 || q-x<2) return false; for(int i=y; i<k; i++) if(win[x][y] != win[q-1][i]) return false;//另外两条 for(int i=x; i<q; i++) if(win[x][y] != win[i][k-1]) return false; for(int i=x+1; i<q-1; i++) for(int j=y+1; j<k-1; j++) if(win[i][j] != '.') return false; return true; } void deal() { for(int i=0; i<w; i++) for(int j=0; j<l; j++) { int num = win[i][j]-'A'; char temp = win[i][j]; if(temp>='A' && temp<='Z' && !v[num]) { v[num]=1; int k=0, q=0, e=0; for(k=j; win[i][k]==temp; k++); for(q=i; win[q][j]==temp; q++); if(judge(i, j, k, q)) { v[num] = 2; } } } } int main() { while(scanf("%d%d%*c", &w, &l)==2 && w && l) { for(int i=0; i<w; i++) gets(win[i]); memset(v, 0, sizeof(v)); deal(); for(int i=0; i<26; i++) if(v[i]==2) { printf("%c", i+'A'); } printf("\n"); } return 0; }
相关文章推荐
- Item 19: 使用srd::shared_ptr来管理共享所有权的资源
- 分页技术框架(Pager-taglib)学习一(页面分页)
- 【Xamarin挖墙脚系列:Xamarin开发环境配置需求】
- 转自笔译小王子李锦森 JOHNSON的博客 真正好的英文网站
- ADB故障解决方案
- 数据结构实验之二叉树六:哈夫曼编码
- Item 18: 使用srd::unique_ptr来管理独占所有权的资源
- Item 17: 理解特殊成员函数的生成规则
- InputStream写文件出现大量NUL
- LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间
- 2016就业市场 高薪和低潮在哪里?
- 将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)
- 关于C语言中进制问题以及简单的浅谈进制转化问题。
- 1002. 写出这个数
- Item 16: 让const成员函数做到线程安全
- EasyUi图标
- 从request获取各种路径总结
- 怎么实现iMindMap视图间的快速切换
- Linux脚本参数之if fi
- Item 15: 只要有可能,就使用constexpr