【2019.3.31】
最近vjudge看不到UVA的题目了,每次都要打开官网看题目,真是令人捉急
但是!!我们可以直接浏览题目的pdf文件:
https://uva.onlinejudge.org/external/ 这个可以看到所有题目索引,但打开还是慢
https://uva.onlinejudge.org/external/2/201.pdf 这个直接访问要看的题的文件,超快
类似于这个格式,只需要把后面的2/201改成自己想看的题目就可以了!
飞速看题,爽的一批。
下面这个题主要注意的是输入格式:
水平边:H 行数 列数
竖直边:V 列数 行数 ?这个千万别弄错了
#include <iostream>
#include <cstring>
using namespace std;
int n; //dots
int m; //lines
int square[11][11][2]; //水平边,垂直边
int numSize[11]; //各个尺寸的数量
int numTotal;
//以点(r,c)为左上角搜索尺寸为s的方块
//需要判断越界
//找到返回1
//没找到,缺左/上边、或者越界返回-1
//没找到,缺右/下边返回0
int findSize(int r, int c, int s)
{
if(r+s>n || c+s>n) return -1;
//cout<<r<<' '<<c<<' '<<s<<endl;
for(int j=c; j<c+s; j++) //上边
if(square[r][j][0]!=1)
return -1;
//cout<<"0 OK"<<endl;
for(int i=r; i<r+s; i++) //左边
if(square[i][c][1]!=1)
return -1;
//cout<<"1 OK"<<endl;
for(int j=c; j<c+s; j++) //下边
if(square[r+s][j][0]!=1)
return 0;
//cout<<"2 OK"<<endl;
for(int i=r; i<r+s; i++) //右边
if(square[i][c+s][1]!=1)
return 0;
//cout<<"3 OK"<<endl;
return 1;
}
int main()
{
//freopen("C:\\Users\\Summer\\Desktop\\input.txt", "r", stdin);
//freopen("C:\\Users\\Summer\\Desktop\\output.txt", "w", stdout);
int numSqu = 0;
while(scanf("%d", &n)!=EOF) {
memset(square, 0, sizeof(square));
memset(numSize, 0, sizeof(numSize));
numTotal=0;
scanf("%d", &m);
char t;
int r,c;
for(int i=0; i<m; i++) {
cin>>t>>r>>c;
if(t=='H') square[r][c][0]=1;
else square[c][r][1]=1;
}
int flag;
for(int i=1; i<n; i++) {
for(int j=1; j<n; j++) {
for(int s=1; s<n; s++) {
flag=findSize(i, j, s);
if(flag==1) {
numSize[s]++;
numTotal++;
}
else if(flag==-1)
break;
}
}
}
if(numSqu) cout<<endl<<"**********************************"<<endl<<endl;
numSqu++;
cout<<"Problem #"<<numSqu<<endl<<endl;
if(numTotal) {
for(int s=1; s<n; s++) {
if(numSize[s])
cout<<numSize[s]<<" square (s) of size "<<s<<endl;
}
}
else cout<<"No completed squares can be found."<<endl;
}
return 0;
}