一、第二周任务 - Virtual Judge (vjudge.net)
1、这题由于数据量小,就可以通过枚举整体的移动状态,匹配,找出所有状态,看是否有一种状态和另一种状态完全符合,就Yes,没有一种就No
附代码
#include<bits/stdc++.h>
using namespace std;
char jl1[31][31];
char jl2[31][31];
int g,k,da;
string smg;
int main()
{
cin>>g>>k;
for(int i=0;i<g;i++)
{
cin >> smg;
for(int j = 0;j < k;j++)
{
jl1[i][j] = smg[j];
}
}
for(int i = 0;i <g;i++)
{
cin >> smg;
for(int j = 0;j < k;j++)
{
jl2[i][j] = smg[j];
}
}
for(int i = 0;i < g;i++)
for(int j = 0;j < k;j++)
{
int kz = 1;
for(int hi = 0;hi <g;hi++)
for(int hj = 0;hj <k;hj++){
if(jl1[(hi + i) % g][(hj + j) % k] != jl2[hi][hj])
kz = 0;
}
if(kz!=0)da=1;
}
if(da==1)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
二、第二周任务 - Virtual Judge (vjudge.net)
1、这题是说在给定的状态中,统计,所有相同长度的斜十字,数量;
2、既然这样我们就可以,通过枚举所有点为十字中心,往四个对角去找最大长度,为避免重复查找,就需要将找成功找到过的点标记;
3、枚举完后输出所有可能长度统计的次数,即1~min(H,W);
附代码
#include<bits/stdc++.h>
using namespace std;
char bj[101][101];
int g,k,cd;
int js[101];
int find(int i,int j){
int cs = 1;
while(i + cs<= g && i - cs >= 1 && j + cs <= k && j - cs >= 1)
{ if( bj[i+cs][j+cs]=='#'&& bj[i+cs][j-cs]=='#'&& bj[i - cs][j + cs]=='#'&& bj[i - cs][j - cs]=='#'){
bj[i+cs][j+cs] = bj[i+cs][j-cs] = bj[i-cs][j-cs] = bj[i - cs][j + cs] ='.';
cs++;
}
else break;
}
return cs - 1;
}
int main()
{
cin>>g>>k;
if(g>k)cd=k;
else cd=g;
getchar();
for(int i = 1;i <= g;i++)
{
for(int j =1;j <=k;j++)
{char c;
cin>>c;
if(c!= '.')
bj[i][j] ='#';
}
getchar();
}
for(int i = 1;i <= g;i++)
for(int j = 1;j <= k;j++)
if(bj[i][j])
js[find(i,j)]++;
for(int i = 1;i <= cd;i++)
cout<<js[i]<<" ";
}