咋回事???全WA了?求HACK
查看原帖
咋回事???全WA了?求HACK
180924
FLAT_LCH楼主2022/5/6 21:35
#include <cstdint>
#include <vector>
#include <iostream>

#define N 10

using namespace std;

long long m,pos[1100000];
//long long aaa[11]={0,3,7,9,8,10,1,5,4,2,6};
long long a[1100000]={};
bool vis[1100000]={};

uint64_t query(int l, int r);/*
{
	cout<<"query: "<<l<<" "<<r<<"--->";
	long long x=0,minn=0x3f3f3f3f;
	for(long long i=l;i<=r;i++)
	{
		x+=aaa[i];
		minn=min(minn,aaa[i]);
	}
	cout<<x-minn<<"\n";
	return x-minn;
}*/
uint32_t get(int x);/*
{
	cout<<"get: "<<x<<"--->";
	cout<<aaa[x]<<"\n";
	return aaa[x];
}*/

pair<long long,long long> sf()
{
	long long len=0;
	for(long long i=1;i<=m;i++)
		if(!vis[i])
			pos[++len]=i;
	if(len<=2)
	{
		if(len==1)
			return {pos[1],get(pos[1])};
		long long a=get(pos[1]),b=get(pos[2]);
		if(a<b)
			return {pos[1],a};
		return {pos[2],b};
	}
	long long s1=len/3+1,s2=len-len/3;//l~s1,s1+1~s2,s2+1~len
	long long ans1=query(1,pos[s2])-query(1,pos[s1]-1);
	long long ans2=query(pos[s1],m)-query(pos[s2]+1,m);
	//cout<<"@@@"<<ans1<<' '<<ans2<<' '<<len<<' '<<s1<<' '<<s2<<endl;
	if(ans1==ans2)
	{
		for(long long i=s1;i<=s2;i++)
			vis[pos[i]]=true;
	}
	else if(ans1>ans2)
	{
		for(long long i=1;i<s1;i++)
			vis[pos[i]]=true;
	}
	else if(ans1<ans2)
	{
		for(long long i=s2+1;i<=len;i++)
			vis[pos[i]]=true;
	}
	return sf();
}

std::vector<uint32_t> recover(int n)
{
	m=n;
	pair<long long,long long> ans=sf();
	//cout<<"!!!!!!! "<<ans.first<<' '<<ans.second<<endl;
	a[ans.first]=ans.second;
	for(long long i=ans.first+1;i<=m;i++)
		a[i]=query(ans.first,i);
	for(long long i=1;i<ans.first;i++)
		a[i]=query(i,ans.first);
	for(long long i=m;i>ans.first+1;i--)
		a[i]=a[i]-a[i-1];
	for(long long i=1;i<ans.first-1;i++)
		a[i]=a[i]-a[i+1];
	std::vector<uint32_t> res(n);
	for(long long i=1;i<=n;i++)
		res.push_back((uint32_t)a[i]);//,cout<<a[i]<<' ';
	return res;
}
/*
int main()
{
	//query(1,10);
	vector<uint32_t> ans=recover(N);
	return 0;
}*/
2022/5/6 21:35
加载中...