UVA201正方形
来源:互联网 发布:ios 内存优化 编辑:程序博客网 时间:2024/05/08 03:06
像我其他文章中写的一样,读题很重要,CSDN上有 紫书的原题资源。
这题我的思路是用数组存储线段,用r1,r2,c1,c2的值使不同的线段被储存。
(可以理解成不同的向量)
#include<stdio.h>#include<string.h>#define maxn 12#define c1 1 //此部分是我的解题#define c2 10 //思想的核心#define r1 100 //<---------#define r2 1000 //<---------int q[maxn][maxn],cnt[maxn],m,n;int main(){ char cmd[2]; int x,y,kase=0; while(scanf("%d %d",&n,&m)==2){ memset(q,0,sizeof(q)); memset(cnt,0,sizeof(cnt)); while(m--){ scanf("%s %d %d",cmd,&x,&y); //输入线段 if(cmd[0]=='H'){ q[x][y]+=r1; q[x][y+1]+=r2; } else{ q[y][x]+=c1; q[y+1][x]+=c2; } } for(int i=1;i<=n;i++){//每个正方形从左上角开始判断 for(int j=1;j<=n;j++){ if(q[i][j]%r2>=r1 && q[i][j]%c2>=c1){ search(i,j);//为r或c线段的第一条时 } //进行下面的判断 } } printf("Problem #%d\n\n",++kase);//没怎么看输出格式,可能格式不标准 int count=0; for(int i=1;i<=n;i++){ if(cnt[i]){ printf("%d square(s) of size %d\n",cnt[i],i); count++; } } if(!count) printf("No completed squares can be found\n"); printf("\n"); for(int i=0;i<34;i++) printf("*"); printf("\n"); } return 0;}void search(int x,int y){ int i,j,mark; for(i=1;i<=n&&x+i<=n&&y+i<=n;i++){ for(j=1,mark=1;j<=i;j++){ if(q[x][y+j]/r2==0 || q[x+j][y]%r1<c2 || q[x+i][y+j]/r2==0 || q[x+j][y+i]%r1<c2) mark=0; } if(mark) cnt[i]++; }}/*sample input&output416H 1 1H 1 3H 2 1H 2 2H 2 3H 3 2H 4 2H 4 3V 1 1V 2 1V 2 2V 2 3V 3 2V 4 1V 4 2V 4 323H 1 1H 2 1V 1 2*/
画出我上面的图能更好地理解。
未完待续。。。
如有错误纰漏,请指出
0 0
- Uva201正方形
- UVA201正方形
- UVa201 正方形
- uva201正方形squares
- 正方形(squares,UVa201)
- 习题4-2 正方形 UVa201
- 习题4-2 正方形 UVa201
- UVa201
- UVa201
- uva201
- UVa201
- UVa201
- UVa201
- 算法竞赛入门经典(第2版)习题4-2 正方形 Squares UVa201
- 算法竞赛入门经典(第2版)习题4-2 正方形UVa201
- 算法竞赛入门经典 第二版 习题4-2 正方形 Squares uva201
- UVA201 Squares
- UVA201 - Squares
- Android IO流
- Android中的canvas介绍
- 寒假20:算法训练 回文数
- 归并排序
- 二叉排序树实现(C++)
- UVA201正方形
- java 分批次读取java.util.List 数据
- 微信小程序调试中遇到不在以下合法域名列表的解决方案
- lab1 part1 pc bootstrap
- 笔记:equal和==
- Principal Component Analysis
- 【Bzoj2733】永无乡
- leetcode: Convert Sorted List to Binary Search Tree
- (转)Android入门:Activity四种启动模式