QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#877883#5874. Mystery Squareoceeff41 ✓435ms3584kbC++141.8kb2025-02-01 11:50:562025-02-01 11:50:57

Judging History

This is the latest submission verdict.

  • [2025-02-01 11:50:57]
  • Judged
  • Verdict: 41
  • Time: 435ms
  • Memory: 3584kb
  • [2025-02-01 11:50:56]
  • Submitted

answer

#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#ifdef ONLINE_JUDGE
	#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
	char buf[1<<21],*p1=buf,*p2=buf;
#endif
#define int long long
using namespace std;typedef __int128 ll;int read(){int num=0,f=1;char c;while(!isdigit(c=getchar()))if(c=='-')f=-1;while(isdigit(c))num=num*10+(c&15),c=getchar();return num*f;}void write(ll x,char ch=' '){int F[40],cnt=0;if(!x)putchar('0');if(x<0)putchar('-'),x=-x;while(x)F[cnt++]=x%10+'0',x/=10;while(cnt)putchar(F[--cnt]);putchar(ch);}
namespace Main
{
    int n;ll L,R,x,y,z,xx,yy,zz,ans;string ch;
    ll cal1(int m,ll l,ll r){const ll S=((r-l)>>((m+1)/2))<<((m+1)/2);for(ll T=S;1;T=(T-1)&S){ll x=l|T,y=x+(((ll)1)<<((m+1)/2));for(ll j=sqrtl(x),t;j*j<=y;++j){t=j*j;if((l&t)==l&&(t&r)==t)return j;}if(!T)break;}return 0;}
    ll cal2(int m,ll l,ll r,int p,ll z){if(p==(m+1)/2){ll t=z*z;if((l&t)==l&&(t&r)==t)return z;return 0;}
    if(p==1||p==(m-1)/2||((r-l)>>(p+1)&1)){ll t=cal2(m,l,r,p+1,z);return t?t:cal2(m,l,r,p+1,z|((ll)1<<p));}
    return cal2(m,l,r,p+1,((l^(z*z))>>(p+1)&1)<<p|z);}
    ll solve(ll l,ll r){int m=0;for(;(((ll)1)<<m)<=l;++m);int c1=__builtin_popcountll((r-l)>>((m+1)/2)),c2=__builtin_popcountll((r-l)&((((ll)1)<<((m+1)/2))-1));
    if(c1<c2)return cal1(m,l,r);return cal2(m,l,r,1,1);}
    void main()
    {
        cin>>ch,L=R=ans=0;for(auto i:ch)L*=2,R*=2,L+=(i=='1'),R+=(i!='0');for(int i=0;R>>i;i+=2){z=solve(L>>i,R>>i);if(z){ans=(z*z)<<i;break;}}ch="";for(;ans;ans>>=1)ch.push_back('0'+(ans&1));reverse(ch.begin(),ch.end()),cout<<ch<<endl;
    }
}
signed main()
{
    const bool base=1,IO=0;int T;if(!base)T=1;else if(IO)T=read();else ios::sync_with_stdio(0),cin>>T;for(int i=1;i<=T;++i){if(base)cout<<"Case #"<<i<<": ";Main::main();}
    return 0;
}

詳細信息

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 1ms
memory: 3584kb

input:

25
1???
1
10??110??00??1000??
1??010?0110?1010?0?010?0111011?11100?100010?0??0??1
1??11????00??1?1?0?1??01??110110?11?00100110?00100?0?00
11?1?1???11111?11?1??11110000?00?????00??0?000?000?1
10??000000?0?00000?00000000??0?0000???00??????0000???
101???11??11000?????1??1?1??10??0?0100011?0001?01011001...

output:

Case #1: 1001
Case #2: 1
Case #3: 1011110110000100001
Case #4: 111010001100101000001010111011011100110001000110001
Case #5: 1101111110000101100101010111011001110010011000010000100
Case #6: 1111111111111111111111111000000000000000000000000001
Case #7: 1000000000000000000000000000000000000000000000000...

result:

ok 25 lines

Subtask #2:

score: 31
Accepted

Test #2:

score: 31
Accepted
time: 435ms
memory: 3584kb

input:

25
1????????????????????111101010000011100110101111000001011111100110000011000101100000010010110100101000????????????????????
10?11100?000111??11?01010110100??1?100111?001000000??0101?110?0111?011?11?1??00010111?010??100?100??10?010?001001110111110?1
1000100111100100110011010111100001111010?????????...

output:

Case #1: 11100101110101010110111110101000001110011010111100000101111110011000001100010110000001001011010010100001101011000010100001
Case #2: 1011110000001110111001010110100001110011100010000001101010110001111011111110000010111101010100010010101010100100111011111001
Case #3: 1000100111100100110011010...

result:

ok 25 lines

Extra Test:

score: 0
Extra Test Passed