QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#73546#3033. Harry Potter and the Palindromic RadiuszhangbojuTL 0ms0kbC++141.6kb2023-01-25 18:20:472023-01-25 18:20:49

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-25 18:20:49]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2023-01-25 18:20:47]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
template <typename T> inline void read(T &x)
{
	x=0;short f=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
	for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x*=f;return;
}
const int N=1e6+5;
#define ll long long
const int base=13331;
const ll mod=482470120140974767;
ll mul(ll a,ll b)
{
	return (__int128)(a)*b%mod;
}
int n;
int h[N];
int a[4][N];
ll hs[N],rhs[N];
ll pw[N];
ll getl(int l,int r)
{
	return (hs[r]-mul(hs[l-1],pw[r-l+1])+mod)%mod;
}
ll getr(int l,int r)
{
	return (rhs[l]-mul(rhs[r+1],pw[r-l+1])+mod)%mod;
}
int main()
{
	pw[0]=1;
	for(int i=1;i<N;++i) pw[i]=mul(pw[i-1],base);
	int T;read(T);
	while(T--)
	{
		read(n);
		for(int i=1;i<=n;++i)
			read(h[i]);
		int idx=0;
		bool has_ans=0;
		for(int x:{0,1})
			for(int y:{0,1})
			{
				++idx;
				a[idx][1]=x,a[idx][2]=y;
				for(int i=3;i<=n;++i)
					if(h[i-1]) a[idx][i]=a[idx][i-2];
					else a[idx][i]=a[idx][i-2]^1;
				hs[0]=rhs[n+1]=0;
				for(int i=1;i<=n;++i)
					hs[i]=(mul(hs[i-1],base)+a[idx][i]+1)%mod;
				for(int i=n;i;--i)
					rhs[i]=(mul(rhs[i+1],base)+a[idx][i]+1)%mod;
				auto check=[&](int p,int x)
				{
					if(p-x<1||p+x>n) return false;
					if(!x) return true;
					return getl(p-x,p-1)==getr(p+1,p+x);
				};
				bool flag=1;
				for(int i=1;i<=n;++i)
					if(!check(i,h[i])||check(i,h[i]+1))
						flag=0;
				has_ans|=flag;
			}
		if(!has_ans) 
		{
			puts("0");
			continue;
		}
		printf("%d\n",idx);
		for(int i=1;i<=idx;++i)
		{
			for(int j=1;j<=n;++j) putchar(a[i][j]+'0');
			puts("");
		}
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

131112
2
0 0
2
0 1
2
0 0
2
1 0
2
0 0
2
0 1
2
0 0
2
0 1
3
0 1 0
3
0 1 1
3
0 0 0
3
0 1 0
3
0 1 0
3
0 2 0
3
0 0 0
3
1 0 0
3
0 0 0
3
1 0 0
3
0 1 0
3
0 2 0
3
0 0 0
3
0 0 1
3
0 1 0
3
0 2 0
4
0 1 1 0
4
0 1 2 0
4
0 0 1 0
4
0 0 1 1
4
0 1 0 0
4
0 1 0 1
4
0 0 0 0
4
0 0 1 0
4
0 0 1 0
4
1 0 1 0
4
0 1 1 0
4
0 1 2...

output:

4
00
01
10
11
0
4
00
01
10
11
0
4
00
01
10
11
0
4
00
01
10
11
0
4
000
010
101
111
0
4
001
011
100
110
4
000
010
101
111
4
000
010
101
111
0
4
001
011
100
110
0
4
001
011
100
110
0
4
000
010
101
111
0
4
001
011
100
110
0
4
000
010
101
111
0
4
0000
0101
1010
1111
0
4
0010
0111
1000
1101
0
4
0001
0100
...

result: