QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#384696#5874. Mystery SquareKevin53070 625ms3708kbC++233.0kb2024-04-10 10:35:432024-04-10 10:35:44

Judging History

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

  • [2024-04-10 10:35:44]
  • 评测
  • 测评结果:0
  • 用时:625ms
  • 内存:3708kb
  • [2024-04-10 10:35:43]
  • 提交

answer

//Author: Kevin
#include<bits/stdc++.h>
//#pragma GCC optimize("O2")
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb emplace_back
#define mp make_pair
#define ALL(x) (x).begin(),(x).end()
#define rALL(x) (x).rbegin(),(x).rend()
#define srt(x) sort(ALL(x))
#define rev(x) reverse(ALL(x))
#define rsrt(x) sort(rALL(x))
#define sz(x) (int)(x.size())
#define inf 0x3f3f3f3f
#define pii pair<int,int>
#define lb(v,x) (int)(lower_bound(ALL(v),x)-v.begin())
#define ub(v,x) (int)(upper_bound(ALL(v),x)-v.begin())
#define uni(v) v.resize(unique(ALL(v))-v.begin())
#define longer __int128_t
void die(string S){puts(S.c_str());exit(0);}
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	for(int tc=1;tc<=t;tc++)
	{
		string s;
		cin>>s;
		int m=sz(s);
		int cnt0=0,cnt1=0;
		for(int i=0;i<m;i++)
			if(s[i]=='?')
			{
				if(i<m/2)
					cnt0++;
				else
					cnt1++;
			}
		if(cnt0<=cnt1)
		{
			bool flag=0;
			for(int i=0;i<(1<<cnt0)&&!flag;i++)
			{
				longer mnval=0,mxval=0;
				int c=0;
				for(int j=0;j<m;j++)
				{
					mnval<<=1;
					mxval<<=1;
					if(s[j]!='?')
					{
						mnval|=(s[j]&1);
						mxval|=(s[j]&1);
					}
					else if(c<cnt0)
					{
						mnval|=(i>>c&1);
						mxval|=(i>>c&1);
						c++;
					}
					else
						mxval|=1;
				}
				longer a=sqrt((long double)mnval),b=sqrt((long double)mxval);
				for(longer x=a;x<=b&&!flag;x++)
				{
					longer val=x*x;
					if((val&mnval)==mnval)
					{
						longer diff=mnval^val;
						longer tmp=mnval^mxval;
						if((diff&tmp)==diff)
						{
							flag=1;
							cout<<"Case #"<<tc<<": ";
							for(int i=m-1;i>=0;i--)
								cout<<(int)(val>>i&1);
							cout<<'\n';
						}
					}
				}
			}
		}
		else
		{
			bool flag=0;
			for(int i=0;i<(1<<cnt1)&&!flag;i++)
			{
				longer mnval=0,mxval=0;
				int c=0;
				for(int j=0;j<m;j++)
				{
					mnval<<=1;
					mxval<<=1;
					if(s[j]!='?')
					{
						mnval|=(s[j]&1);
						mxval|=(s[j]&1);
					}
					else if(j>=m/2)
					{
						mnval|=(i>>c&1);
						mxval|=(i>>c&1);
						c++;
					}
					else
						mxval|=1;
				}
				longer x=0;
				bool ok=1;
				for(int j=m-1;j>=m/2;j++)
				{
					bool fl=0;
					for(int k=0;k<2;k++)
					{
						longer tmp=x|((longer)(k)<<(m-j-1));
						longer target=mnval&(((longer)(1)<<(m-j))-1);
						if((tmp*tmp)&(((longer)(1)<<(m-j))-1)==target)
						{
							fl=1;
							x=tmp;
							break;
						}
					}
					if(!fl)
					{
						ok=0;
						break;
					}
				}
				if(!ok)
					continue;
				for(int i=0;i<8&&!flag;i++)
				{
					longer cur=x+((longer)(i)<<(m-(m/2)));
					longer val=cur*cur;
					if((val&mnval)==mnval)
					{
						longer diff=mnval^val;
						longer tmp=mnval^mxval;
						if((diff&tmp)==diff)
						{
							flag=1;
							cout<<"Case #"<<tc<<": ";
							for(int i=m-1;i>=0;i--)
								cout<<(int)(val>>i&1);
							cout<<'\n';
						}
					}
				}
			}
		}
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

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

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 #6: 1111111111111111111111111000000000000000000000000001
Case #7: 10000000000000000000000000000000000000000000000000000
Case #9: 101110001101100111000101000010111100111111110001111...

result:

wrong answer 5th lines differ - expected: 'Case #5: 1101111110000101100101010111011001110010011000010000100', found: 'Case #6: 1111111111111111111111111000000000000000000000000001'

Subtask #2:

score: 0
Wrong Answer

Test #2:

score: 0
Wrong Answer
time: 625ms
memory: 3596kb

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 #5: 1111111111111111111111111...

result:

wrong answer 3rd lines differ - expected: 'Case #3: 100010011110010011001...0000000000000000000000000000000', found: 'Case #5: 111111111111111111111...0000000000000000000000000000001'