QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#150654#4912. WereYouLastzhouhuanyi92 4102ms4960kbC++144.5kb2023-08-25 23:08:372023-08-25 23:08:41

Judging History

This is the latest submission verdict.

  • [2023-08-25 23:08:41]
  • Judged
  • Verdict: 92
  • Time: 4102ms
  • Memory: 4960kb
  • [2023-08-25 23:08:37]
  • Submitted

answer

#include<bits/stdc++.h>
#define N 7
using namespace std;
bool query(int);
void modify(int,bool);
int a[N+1]={0,5,4,3,2,2},b[N+1]={0,13,4,3,2,2},b2[N+1]={0,3,3,2,1},c[N+1]={0,13,13,4,3,1},d[N+1],d2[N+1];
int cnt;
bool WereYouLast(int n,int m)
{
	if (n==(1<<10))
	{
		for (int i=1;i<=10;++i)
			if (!query(i))
			{
				for (int j=1;j<=i-1;++j) modify(j,0);
				modify(i,1);
				return 0;
			}
		return 1;
	}
	else if (n==(1<<16))
	{
		int res=4;
		bool op;
		for (int i=1;i<=5;++i)
		{
			if (i==5||!query(i))
			{
				for (int j=1;j<=a[i];++j) d[j]=query(res+j);
				op=1;
				for (int j=1;j<=a[i];++j) op&=d[j];
				if (op) return 1;
				for (int j=1;j<=a[i];++j)
					if (!d[j])
					{
						d[j]=1,modify(res+j,1);
						for (int k=1;k<=j-1;++k) d[k]=0,modify(res+k,0);
						break;
					}
				op=1;
				for (int j=1;j<=a[i];++j) op&=d[j];
				if (i!=5&&op)
				{
					for (int j=1;j<=a[i];++j) modify(res+j,0);
					modify(i,1);
				}
				for (int j=1;j<=i-1;++j) modify(j,0);
				return 0;
			}
			res+=a[i];
		}
	}
	else if (n==(1<<20))
	{
		int res=4,res2;
		bool op,op2;
		for (int i=1;i<=5;++i)
		{
			if (i==5||!query(i))
			{
				if (i==1)
				{
					res2=res+3,op=0;
					for (int j=1;j<=4;++j)
					{
						if (j==4||!query(res+j))
						{
							for (int k=1;k<=b2[j];++k) d2[k]=query(res2+k);
							if (j==1&&!query(res+b[i])) d2[1]=1,modify(res2+1,1),modify(res+b[i],1);
							op2=1;
							for (int k=1;k<=b2[j];++k) op2&=d2[k];
							if (op2)
							{
								op=1;
								break;
							}
							for (int k=1;k<=b2[j];++k)
								if (!d2[k])
								{
									d2[k]=1,modify(res2+k,1);
									for (int t=1;t<=k-1;++t) d2[t]=0,modify(res2+t,0);
									break;
								}
							op2=1;
							for (int k=1;k<=b2[j];++k) op2&=d2[k];
							if (j!=4&&op2)
							{
								for (int k=1;k<=b2[j];++k) modify(res2+k,0);
								modify(res+j,1);
							}
							for (int k=1;k<=j-1;++k) modify(res+k,0);
							break;
						}
						res2+=b2[j];
					}
					if (op)
					{
						for (int j=1;j<=3;++j) modify(res+j,0);
						for (int j=1;j<=b2[4];++j) modify(res2+j,0);
						modify(res+b[i],0),modify(i,1);
					}
					for (int j=1;j<=i-1;++j) modify(j,0);
				}
				else
				{
					for (int j=1;j<=b[i];++j) d[j]=query(res+j);
					op=1;
					for (int j=1;j<=b[i];++j) op&=d[j];
					if (op) return 1;
					for (int j=1;j<=b[i];++j)
						if (!d[j])
						{
							d[j]=1,modify(res+j,1);
							for (int k=1;k<=j-1;++k) d[k]=0,modify(res+k,0);
							break;
						}
					op=1;
					for (int j=1;j<=b[i];++j) op&=d[j];
					if (i!=5&&op)
					{
						for (int j=1;j<=b[i];++j) modify(res+j,0);
						modify(i,1);
					}
					for (int j=1;j<=i-1;++j) modify(j,0);
				}
				return 0;
			}
			res+=b[i];
		}
	}
	else if (n==(1<<26))
	{
		int res=4,res2;
		bool op,op2;
		cnt++;
		for (int i=1;i<=5;++i)
		{
			if (i==5||!query(i))
			{
				if (i<=2)
				{
					res2=res+3,op=0;
					for (int j=1;j<=4;++j)
					{
						if (j==4||!query(res+j))
						{
							for (int k=1;k<=b2[j];++k) d2[k]=query(res2+k);
							if (j==1&&!query(res+c[i])) d2[1]=1,modify(res2+1,1),modify(res+c[i],1);
							op2=1;
							for (int k=1;k<=b2[j];++k) op2&=d2[k];
							if (op2)
							{
								op=1;
								break;
							}
							for (int k=1;k<=b2[j];++k)
								if (!d2[k])
								{
									d2[k]=1,modify(res2+k,1);
									for (int t=1;t<=k-1;++t) d2[t]=0,modify(res2+t,0);
									break;
								}
							op2=1;
							for (int k=1;k<=b2[j];++k) op2&=d2[k];
							if (j!=4&&op2)
							{
								for (int k=1;k<=b2[j];++k) modify(res2+k,0);
								modify(res+j,1);
							}
							for (int k=1;k<=j-1;++k) modify(res+k,0);
							break;
						}
						res2+=b2[j];
					}
					if (op)
					{
						for (int j=1;j<=3;++j) modify(res+j,0);
						for (int j=1;j<=b2[4];++j) modify(res2+j,0);
						modify(res+c[i],0),modify(i,1);
					}
					for (int j=1;j<=i-1;++j) modify(j,0);
				}
				else
				{
					for (int j=1;j<=c[i];++j) d[j]=query(res+j);
					op=1;
					for (int j=1;j<=c[i];++j) op&=d[j];
					if (op) return 1;
					for (int j=1;j<=c[i];++j)
						if (!d[j])
						{
							d[j]=1,modify(res+j,1);
							for (int k=1;k<=j-1;++k) d[k]=0,modify(res+k,0);
							break;
						}
					op=1;
					for (int j=1;j<=c[i];++j) op&=d[j];
					if (i!=5&&op)
					{
						for (int j=1;j<=c[i];++j) modify(res+j,0);
						modify(i,1);
					}
					for (int j=1;j<=i-1;++j) modify(j,0);
				}
				return 0;
			}
			res+=c[i];
		}
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 0ms
memory: 3748kb

input:

1024 10

output:

12345876 10 10

result:

ok Correct Answer.
C1 = 10.
C2 = 10.

Subtask #2:

score: 20
Accepted

Test #2:

score: 20
Accepted
time: 6ms
memory: 4960kb

input:

65536 100000

output:

12345876 6 6

result:

ok Correct Answer.
C1 = 6.
C2 = 6.

Subtask #3:

score: 30
Accepted

Test #3:

score: 30
Accepted
time: 67ms
memory: 4956kb

input:

1048576 100000

output:

12345876 6 6

result:

ok Correct Answer.
C1 = 6.
C2 = 6.

Subtask #4:

score: 32
Acceptable Answer

Test #4:

score: 32
Acceptable Answer
time: 4102ms
memory: 4912kb

input:

67108864 100000

output:

12345876 7 7

result:

points 0.80 Correct Answer.
C1 = 7.
C2 = 7.