QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#420112 | #7398. Triangle Tiling | Bronya | RE | 0ms | 5780kb | C++14 | 2.1kb | 2024-05-24 14:42:44 | 2024-05-24 14:42:45 |
Judging History
answer
#include<bits/stdc++.h>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
int n;
char s[5005];
bool mp[5005][5005];
vector<pair<int,int> >vt;
vector<int>hav[5005];
char ans[5005][5005];
int fa[5005],fr[5005];
void Init(int x){
fr[0]=0;
for(int i=1;i<=x;i++)fa[i]=fr[i]=i;
}
int Find(int x){
return (fa[x]!=x?fa[x]=Find(fa[x]):x);
}
void shaber(){
puts("Impossible!");
}
void del(int x){
int y=Find(x);
if(y==x)fa[x]=Find(x-1),fr[Find(x-1)]=fr[x];
else fa[fr[y]+1]=y,fr[y]=fr[fr[y]+1];
}
void Solve(){
scanf("%d",&n);vt.clear();
for(int i=1;i<=n;i++){
scanf("%s",s+1);
for(int j=1;j<=i;j++){
mp[i][j]=s[j]-'0';
if(mp[i][j]==0)vt.push_back({i,j}),ans[i][j]='-';
}
}
for(int i=n;i>=1;i--){
for(int j=1;j<=i;j++)hav[j].clear();
for(auto [x,y]:vt){
if(x>=i)break;
hav[y+(i-1-x)].push_back(y);
}
vector<int>sb;
for(int j=1;j<=i;j++)
if(mp[i][j]==0)sb.push_back(j);
if(sb.empty())shaber();
for(int j=1;j<sb[0];j++)ans[i][j]='3';
for(int j=sb[sb.size()-1]+1;j<=i;j++)ans[i][j]='1';
if(sb.size()==1)continue;
Init(i+1);
for(int j=1;j<sb[0];j++){
for(auto x:hav[j])del(x);
if(fa[j+1]!=j+1){
shaber();
return;
}
}
for(int j=0;j+1<sb.size();j++){
int u=sb[j],v=sb[j+1],r=u-1;
for(int k=u;k<v;k++){
for(auto x:hav[k]){
del(x);
}
if(fa[k+1]!=k+1){
shaber();
return;
}
if(Find(k)+1<=u)r=k;
}
if(r==v-1){
shaber();
return;
}
ans[i-1][r+1]='2';
mp[i-1][r+1]=0;del(r+1);
for(int k=u+1;k<v;k++)ans[i][k]=(k<=r+1?'1':'3');
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++)
putchar(ans[i][j]);
putchar('\n');
}
return;
}
int main(){
int T;
scanf("%d",&T);
while(T--)Solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 5780kb
input:
1 4 0 11 010 1101
output:
- 21 -3- 33-1
result:
ok ok
Test #2:
score: -100
Runtime Error
input:
909 6 0 11 100 1111 11100 111110 7 0 11 011 1001 10111 100111 1111111 6 0 00 001 1111 11101 111111 8 1 01 111 1111 10111 101110 1101101 11111100 2 1 00 2 0 01 3 0 01 110 7 1 00 011 1010 11011 110111 1111111 8 1 11 111 1011 11010 011110 1101110 01111111 5 1 00 010 1111 10111 6 0 10 011 0101 01111 111...