QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#73546 | #3033. Harry Potter and the Palindromic Radius | zhangboju | TL | 0ms | 0kb | C++14 | 1.6kb | 2023-01-25 18:20:47 | 2023-01-25 18:20:49 |
Judging History
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 ...