結果
| 問題 |
No.2256 Step by Step
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-24 23:59:40 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,033 bytes |
| コンパイル時間 | 866 ms |
| コンパイル使用メモリ | 79,388 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-18 17:46:01 |
| 合計ジャッジ時間 | 5,009 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 WA * 30 |
ソースコード
#include<iostream>
#include<vector>
#include<cassert>
using namespace std;
bool vis[1000][6];
bool check(vector<string>B)
{
for(const string&s:B)assert(s.size()==6);
int t=B.size()*2;
while(t--)
{
for(int i=0;i<B.size();i++)for(int j=0;j<B[i].size();j++)vis[i][j]=false;
for(int i=0;i<B.size();i++)for(int j=0;j<B[i].size();j++)
{
if(i+2<B.size()&&j<B[i+1].size()&&j<B[i+2].size()&&B[i][j]==B[i+1][j]&&B[i+1][j]==B[i+2][j])
{
vis[i][j]=vis[i+1][j]=vis[i+2][j]=true;
}
if(j+2<B[i].size()&&B[i][j]==B[i][j+1]&&B[i][j+1]==B[i][j+2])
{
vis[i][j]=vis[i][j+1]=vis[i][j+2]=true;
}
}
int cnt=0;
for(int i=0;i<B.size();i++)
{
string now="";
for(int j=0;j<B[i].size();j++)if(!vis[i][j])now+=B[i][j];
B[i]=now;
cnt+=now.size();
}
if(t*3!=cnt)return false;
}
return true;
}
vector<string>solve(int N)
{
vector<string>B;
if(N==2)return B;//-1
if(N==1)B.push_back("001110");
else if(N==3)
{
B.push_back("312330");
B.push_back("042441");
B.push_back("015552");
}
else if((N-3)%2==0)
{
B.push_back("411012");
B.push_back("323034");
B.push_back("427065");
B.push_back("785886");
B.push_back("965997");
while(B.size()<N)
{
assert(B.size()+2<=N);
if(B.back()=="965997")
{
B.pop_back();
B.push_back("265107");
B.push_back("230331");
B.push_back("910992");
}
else if(B.back()=="910992")
{
B.pop_back();
B.push_back("710652");
B.push_back("785886");
B.push_back("965997");
}
else assert(false);
}
}
else if(N%3==1)
{
B.push_back("545056");
while(B.size()<N)
{
assert(B.size()+3<=N);
B.push_back("634017");
B.push_back("634017");
B.push_back("743106");
}
B.pop_back();
B.push_back("722123");
}
else if((N-3)%2==1&&N>=8)
{
assert(N>=8);
B.push_back("411012");
B.push_back("323034");
B.push_back("427065");
B.push_back("785886");
B.push_back("965997");
while(B.size()<N-3)
{
assert(B.size()+2<=N-3);
if(B.back()=="965997")
{
B.pop_back();
B.push_back("265107");
B.push_back("230331");
B.push_back("910992");
}
else if(B.back()=="910992")
{
B.pop_back();
B.push_back("710652");
B.push_back("785886");
B.push_back("965997");
}
else assert(false);
}
if(B.back()=="965997")
{
B.pop_back();
B.push_back("265107");
B.push_back("314280");
B.push_back("314280");
B.push_back("949938");
}
else if(B.back()=="910992")
{
B.pop_back();
B.push_back("710652");
B.push_back("364785");
B.push_back("364785");
B.push_back("949938");
}
else assert(false);
}
else
{
assert(N==6);
return B;
B.push_back("411012");
B.push_back("323034");
B.push_back("427065");
B.push_back("364785");
B.push_back("364785");
B.push_back("949938");
}
assert(B.size()==N);
//assert(check(B));
return B;
}
int main()
{
int N;cin>>N;
vector<string>B=solve(N);
if(B.empty())cout<<-1<<endl;
else
{
for(int j=0;j<6;j++)
{
for(string s:B)cout<<s[j];
cout<<endl;
}
}
}