QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#814509 | #9884. Grid Construction | ucup-team3510# | WA | 0ms | 3896kb | C++20 | 2.6kb | 2024-12-14 17:57:30 | 2024-12-14 17:58:23 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int n,m;char s[1011][1011];
namespace constr
{
int n,m;
char s[1011][1011];
char x[11]="><^v.";
bool has=0;
void dfs(int i,int j)
{
if(i==n+1&&j==1)
{
// for(int i=1;i<=n;++i){for(int j=1;j<=m;++j)printf("%c",s[i][j]);putchar(10);}
has=1;return;
}
for(int _=0;_<5;++_)
{
s[i][j]=x[_];
bool ol=s[i][j-1]=='.'||s[i][j-1]=='<',ou=s[i-1][j]=='^'||s[i-1][j]=='.';
bool il=s[i][j]=='.'||s[i][j]=='>',iu=s[i][j]=='.'||s[i][j]=='v';
if(ol+il!=1||ou+iu!=1)continue;
if(j==m&&s[i][j]!='.'&&s[i][j]!='<')continue;
if(i==n&&s[i][j]!='.'&&s[i][j]!='^')continue;
if(j==m)dfs(i+1,1);
else dfs(i,j+1);
if(has)return;
}
}
void proc()
{
for(int i=1;i<=n;++i)s[i][0]='>',s[i][m+1]='<';
for(int i=1;i<=m;++i)s[0][i]='v',s[n+1][i]='^';
dfs(1,1);
}
}
char rotate(char c)
{
if(c=='.')return '.';
if(c=='^'||c=='<')return c^'^'^'<';
if(c=='>'||c=='v')return c^'>'^'v';
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)s[i][j]='.';
if(n%6!=m%6){printf("No\n");return 0;}
if(n%6==3)
{
if(n==3&&m==3)
{
puts("Yes");
puts("<<^");
puts("v.^");
puts("v>>");
return 0;
}
else if(min(n,m)==5){printf("No\n");return 0;}
}
else
{
if(n==5&&m==5)
{
puts("Yes");
puts("<<<<^");
puts("v.v.^");
puts("v>.<^");
puts("v.^.^");
puts("v>>>>");
return 0;
}
else if(min(n,m)==5){printf("No\n");return 0;}
}
int X=0,Y=0;
int nn=n,mm=m;
while(min(n,m)>11)
{
for(int i=1;i<n;++i)s[X+i][Y+m]='^';
for(int i=2;i<=n;++i)s[X+i][Y+1]='v';
for(int i=1;i<m;++i)s[X+1][Y+i]='<';
for(int i=2;i<=m;++i)s[X+n][Y+i]='>';
for(int i=3;i<n;i+=2)s[X+i][Y+2]='>',s[X+i][Y+m-1]='<';
for(int i=3;i<m;i+=2)s[X+2][Y+i]='v',s[X+n-1][Y+i]='^';
for(int i=4;i<n-1;i+=2)s[X+i][Y+3]='<',s[X+i][Y+m-2]='>';
for(int i=4;i<m-1;i+=2)s[X+3][Y+i]='^',s[X+n-2][Y+i]='v';
n-=6;m-=6;X+=3;Y+=3;
}
for(int i=1;i<n;++i)s[X+i][Y+m]='^';
for(int i=2;i<=n;++i)s[X+i][Y+1]='v';
for(int i=1;i<m;++i)s[X+1][Y+i]='<';
for(int i=2;i<=m;++i)s[X+n][Y+i]='>';
++X;++Y;
n-=2;m-=2;
bool flg=0;
constr::n=max(n,m),constr::m=min(n,m);
constr::proc();
// printf("n:%d m:%d X:%d Y:%d\n",n,m,X,Y);
if(n<m)
{
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)s[X+i][Y+j]=rotate(constr::s[j][i]);
}
else
{
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)s[X+i][Y+j]=constr::s[i][j];
}//printf("ny\n");
// printf("ntov\n");
puts("Yes");
for(int i=1;i<=nn;++i)printf("%s\n",s[i]+1);
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3828kb
input:
3 3
output:
Yes <<^ v.^ v>>
result:
ok Correct
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3896kb
input:
4 4
output:
Yes <<<^ v..^ v v>>>
result:
wrong answer Incorrect