一道純模擬 考細心
有幾個糟點:1.題目要求豎紋反向,但平移的時候加的偏差是正向的,如果看自己輸出反了就單純改下輸出是不行的
2.最後一列不輸出
3.平移的時候加的偏差可能超過豎紋長度不止一倍
#include <bits/stdc++.h>
using namespace std;
int x[205],xin[2][205],y[205],yin[2][205],s[205][205],szx,szy,xs,ys;
void creax()
{
xs=0;
for(int i=0;i<szx;i++)
{
for(int k=0;k<xin[0][i];k++)
{
x[xs]=1;
xs++;
}
for(int k=0;k<xin[1][i];k++)
{
x[xs]=0;
xs++;
}
}
}
void creay()
{
ys=0;
for(int i=0;i<szy;i++)
{
for(int k=0;k<yin[1][i];k++)
{
y[ys]=-yin[0][i];
ys++;
}
}
}
void crea()
{
for(int i=0;i<xs;i++)s[i][0]=x[i];
int bias=0;
for(int j=0;j<ys;j++)
{
bias+=y[j];
for(int i=0;i<xs;i++)
{
int cur=i+bias;
while(cur<0)cur+=xs;
while(cur>=xs)cur-=xs;
s[i][j+1]=x[cur];
// cout<<cur<<" ";
}
// cout<<endl;
}
}
int main()
{//cin>>szx>>szy;
while( cin>>szx>>szy)
{
for(int i=0;i<2;i++)
for(int j=0;j<szx;j++)
{
cin>>xin[i][j];
}
for(int i=0;i<2;i++)
for(int j=0;j<szy;j++)
{
cin>>yin[i][j];
}
creax();
creay();
crea();
for(int i=0;i<xs;i++)
{
// cout<<x[i]<<" ";
}//cout<<endl;
for(int i=0;i<ys;i++)
{
// cout<<y[i]<<" ";
}//cout<<endl;
bool flag=true;
for(int i=0;i<xs;i++)
{
if(s[i][0]!=s[i][ys])
{
flag=false;
break;
}
}
if(flag)
for(int i=xs-1;i>=0;i--)
{
for(int j=0;j<ys;j++)
{
cout<<s[i][j];
}
cout<<endl;
}
else cout<<"Can not make beautilful cloth !"<<endl;
// system("palse");
}
return 0;
}