QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#527898#7161. Guessing Gameucup-team0520 114ms4276kbC++202.6kb2024-08-22 22:17:442024-08-22 22:17:44

Judging History

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

  • [2024-08-22 22:17:44]
  • 评测
  • 测评结果:0
  • 用时:114ms
  • 内存:4276kb
  • [2024-08-22 22:17:44]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
//mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
#define mod 998244353
#define ll long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
inline int read()
{
	char ch=getchar(); int nega=1; while(!isdigit(ch)) {if(ch=='-') nega=-1; ch=getchar();}
	int ans=0; while(isdigit(ch)) {ans=ans*10+ch-48;ch=getchar();}
	if(nega==-1) return -ans;
	return ans;
}
void print(vector<int> x){for(int i=0;i<(int)x.size();i++) printf("%d%c",x[i]," \n"[i==(int)x.size()-1]);}
#define N 100005
const int M=32;
int n,m,a[N],b[N],rev[N],id;
struct SMT1
{
	#define ls (u<<1)
	#define rs (u<<1|1)
	#define mid ((l+r)/2)
	int sum[N],dep[N];
	void build(int u,int l,int r)
	{
		if(l==r)
		{
			sum[u]=1;
			dep[u]=1;
			return ;
		}
		build(ls,l,mid),build(rs,mid+1,r);
		sum[u]=sum[ls]+sum[rs];
		dep[u]=dep[ls]+1;
	}
	int update(int u,int l,int r,int pos)
	{
		sum[u]--;
		if(sum[u]==0) return dep[u];
		if(pos<=mid) return update(ls,l,mid,pos);
		else return update(rs,mid+1,r,pos);
	}
}smt1;
void firstrun()
{
	cin>>n;
	if(n==4)
	{
		printf("3\n3\n1\n2\n");
		return ;
	}
	assert(n==100000);
	cout<<7<<endl;
	int sum=0;
	for(int i=1;i<=n-M;i++)
	{
		int pos=read();
		// int pos=i-1;
		sum=(sum+pos)%65536;
		cout<<7<<endl;
		a[pos]=1;
	}
	for(int i=0;i<n;i++) if(!a[i]) rev[i]=m,b[m++]=i;
	assert(m==M);
	smt1.build(1,0,M-1);
	for(int i=0;i<M-1;i++)
	{
		int pos=read();
		// int pos=n-i-1;
		int res=smt1.update(1,0,M-1,rev[pos]);
		if(res==1)
		{
			if(sum>>(rev[pos]/2)&1) res=6;
		}
		cout<<res<<endl;
	}
}
void secondrun()
{
	cin>>n;
	if(n==4)
	{
		printf("1 3\n");
		return ;
	}
	assert(n==100000);
	int c7=0,s7=0;
	for(int i=0;i<n;i++)
	{
		a[i]=read();
		if(a[i]==7) c7++,s7=(s7+i)%65536;
	}
	if(c7==n-M)
	{
		for(int i=0;i<n;i++) if(a[i]==6) a[i]=1;
		for(int i=0;i<n;i++) if(a[i]!=7) rev[i]=m,b[m++]=i;
		int l=0,r=M-1;
		for(int d=5;d>=1;d--)
		{
			vector<int> pos;
			for(int i=l;i<=r;i++) if(a[b[i]]==d) pos.push_back(i);
			if(pos.size()==2)
			{
				printf("%d %d\n",pos[0],pos[1]);
				return ;
			}
			else if(pos.size()==1)
			{
				if(pos[0]<=(l+r)/2) r=(l+r)/2;
				else l=(l+r)/2+1;
			}
			else assert(0);
		}
		printf("%d %d\n",l,l);
	}
	else
	{
		assert(c7==n-M+1);
		int res=0;
		for(int i=n-1;i>=0;i--)
		{
			if(a[i]==1) res=res<<1;
			if(a[i]==6) res=res<<1|1;
		}
		int dif=(res-s7+65536)%65536;
		printf("%d %d\n",dif,min(n-1,dif+65536));
	}
}
signed main()
{
	int t=read();
	if(t==1) firstrun();
	else secondrun();
	return 0;
}



詳細信息

Test #1:

score: 0
Wrong Answer
time: 114ms
memory: 4276kb

input:

1 100000
12606
98679
1143
27998
32709
12689
96311
76575
72650
78703
62559
98406
20833
67597
18721
7007
37493
4265
64463
74773
99034
72638
1056
53975
99258
55401
24025
58380
25917
34732
15691
539
97052
60642
47161
10744
2593
58625
15172
39492
11676
19724
81135
15030
87595
85629
4673
1135
47214
47939
...

output:

7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
...

input:

2 100000
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7...

output:

24 24

result:

wrong answer Token "WA" doesn't correspond to pattern "OK"