QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#340358#7398. Triangle TilingDaiRuiChen007WA 1ms4044kbC++171.8kb2024-02-28 21:44:332024-02-28 21:44:33

Judging History

你现在查看的是最新测评结果

  • [2024-02-28 21:44:33]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4044kb
  • [2024-02-28 21:44:33]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int MAXN=5005;
struct ZkwSegt {
	static const int N=1<<13;
	int tr[N<<1];
	void psu(int p) {
		int t=max(tr[p<<1],tr[p<<1|1]);
		tr[p]+=t,tr[p<<1]-=t,tr[p<<1|1]-=t;
	}
	void init(int n) {
		memset(tr,0,sizeof(tr));
		for(int i=1;i<=n;++i) tr[i+N]=i-1;
		for(int i=N-1;i;--i) psu(i);
	}
	void add(int l,int r) {
		for(l+=N-1,r+=N+1;l^r^1;l>>=1,r>>=1) {
			if(~l&1) ++tr[l^1];
			if(r&1) ++tr[r^1];
			psu(l>>1),psu(r>>1);
		}
		while(l>1) psu(l>>=1);
	}
	int qry(int l,int r) {
		int sl=0,sr=0;
		for(l+=N,r+=N;(l^r)>1;l>>=1,r>>=1) {
			sl+=tr[l],sr+=tr[r];
			if(~l&1) sl=max(sl,tr[l^1]);
			if(r&1) sr=max(sr,tr[r^1]);
		}
		int s=max(sl+tr[l],sr+tr[r]);
		while(l>1) s+=tr[l>>=1];
		return s;
	}
}	T;
char s[MAXN][MAXN],t[MAXN][MAXN];
vector <int> g[MAXN],o[MAXN];
void init(int x) {
	T.init(x);
	for(int i=1;i<=x;++i) o[i].clear();
	for(int i=1;i<=x;++i) for(int j:g[i]) {
		o[j+x-i].push_back(j);
	}
}
void qt() { puts("Impossible!"),exit(0); }
signed main() {
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i) {
		scanf("%s",s[i]+1);
		for(int j=1;j<=i;++j) if(s[i][j]=='0') g[i].push_back(j),t[i][j]='-';
	}
	init(n);
	for(int i=1;i<=n;++i) {
		for(int j:o[i]) T.add(1,j);
		if(T.qry(1,i)>i) qt();
	}
	for(int i=n;i>1;--i) {
		if(g[i].empty()) qt();
		init(i-1);
		int lst=0,pos=0;
		for(int j=1;j<=i;++j) {
			for(int k:o[j]) T.add(1,k);
			if(s[i][j]=='0') {
				s[i-1][pos]='0',t[i-1][pos]='2',g[i-1].push_back(pos);
				for(int k=lst+1;k<=pos;++k) t[i][k]='1';
				for(int k=pos+1;k<j;++k) t[i][k]='3';
				T.add(1,pos),lst=pos=j;
			}
			if(j==i) break;
			if(T.qry(1,j)>j) qt();
			if(lst&&T.qry(1,lst)>=j) pos=j+1;
		}
		for(int j=lst+1;j<=i;++j) t[i][j]='1';
	}
	for(int i=1;i<=n;++i) printf("%s\n",t[i]+1);
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 4044kb

input:

1
4
0
11
010
1101

output:



result:

wrong output format Unexpected end of file - token expected