求大佬给个hack数据,本地测试各种数据都过了,但WA了第三个点还下载不了数据
  • 板块学术版
  • 楼主拱垲
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/10/31 16:13
  • 上次更新2023/11/2 10:33:11
查看原帖
求大佬给个hack数据,本地测试各种数据都过了,但WA了第三个点还下载不了数据
139334
拱垲楼主2023/10/31 16:13

P1185 这是一道普普通通的绿题,但WA了第三个点只有89,半天没想明白错在哪里。题单上的题好多都由于版权原因不让下载数据... 顺便说一下,这个画图题我开始没注意数据范围,误以为数据范围会很大,就没用一个大的画布数组,而是直接一口气输出答案的,所以做法可能复杂了一点。但没办法,做完了我才发现数据范围很小...想复杂了

#include <iostream>
#include <cstdio>
#include <string>
#include <queue>
using namespace std;
int c[20],l[20],d[20],pow2[20],n,m,a,b;
int intpow(int a,int b)//乘方运算函数
{
	int ans=1;
	for(int i=1;i<=b;i++)ans*=a;
	return ans;
}
struct tree
{
	int t[1030];
	int d,e;
	void start(int D)
	{
		d=D;e=intpow(2,d)-1;
		for(int i=1;i<=e;i++)t[i]=1;
	}
	void del(int P)
	{
		t[P]=0;
		if(P*2+1<=e)
		{
			del(P*2);
			del(P*2+1);
		}
	}
	int setd()
	{
		int i;
		for(i=e;i>=1;i--)
			if(t[i]==1)
				break;
		while(i<=(e+1)/2-1)e=(e+1)/2-1,d--;
		return d;
	}
	int isexisted(int a,int b)
	{
		if(t[intpow(2,a-1)-1+b]==1)return 1;
		else return 0;
	}
	int isexisted(int no)
	{
		if(t[no]==1)return 1;
		else return 0;
	}
}T;
queue<int> Ql,Qr,nQl,nQr;
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);     //加速IO用的,不要在意这两行
	cin>>m>>n;
	T.start(m);//初始化树
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b;
		T.del(intpow(2,a-1)-1+b);
	}
	m=T.setd();//更新树的深度
	//辅助数组
	l[1]=1;l[2]=5;c[1]=1;c[2]=3;d[1]=2;d[2]=3;pow2[0]=1,pow2[1]=2,pow2[2]=4;
	for(int i=3;i<=m;i++)
		l[i]=l[i-1]*2+1,c[i]=c[i-1]*2,d[i]=d[i-1]*2,pow2[i]=pow2[i-1]*2;
	//没有画布数组,直接把结果按顺序输出
	for(int i=1,p=1,lno=m,kno=m-1,no=1;i<=c[m];i++)
	{
		if(i==c[m])
		{
			string s="o ";if(m==1)s="o";
			for(int q=1;q<=pow2[no-1];q++)
			{
				for(int j=1;j<=(l[lno]-1)/2;j++)cout<<' ';
				if(T.isexisted(no,q)==1)cout<<s;else cout<<"  ";//no是层,q是层内序号
				for(int j=1;j<=(l[lno]-1)/2;j++)cout<<' ';
				if(q!=pow2[no-1])cout<<' ';
				if(s=="o ")s=" o";else s="o ";
			}
		}
		else if(i==p)
		{
			while(!Ql.empty())Ql.pop();
			while(!Qr.empty())Qr.pop();
			for(int q=1,t=1;q<=pow2[no-1];q++)
			{
				for(int j=1;j<=(l[lno]-1)/2;j++)cout<<' ',t++;
				if(T.isexisted(no,q)==1)
				{
					cout<<"o";
					if(T.isexisted((intpow(2,no-1)-1+q)*2)==1)Ql.push(t-1);
					if(T.isexisted((intpow(2,no-1)-1+q)*2+1)==1)Qr.push(t+1);
					t++;
				}
				else 
					cout<<' ',t++;//no是层,q是层内序号
				for(int j=1;j<=(l[lno]-1)/2;j++)cout<<' ',t++;
				if(q!=pow2[no-1])cout<<' ',t++;
			}
			cout<<endl;
			p+=d[kno];
			kno--;
			lno--;
			no++;
		}
		else
		{
			for(int j=1;j<=l[m];j++)
			{
				if(!Ql.empty()&&j==Ql.front())cout<<'/',nQl.push(Ql.front()-1),Ql.pop();
				else if(!Qr.empty()&&j==Qr.front())cout<<'\\',nQr.push(Qr.front()+1),Qr.pop();
				else cout<<' ';
			}
			cout<<endl;
			Ql=nQl;Qr=nQr;
			while(!nQl.empty())nQl.pop();
			while(!nQr.empty())nQr.pop();
		}
	}
    return 0;
}
2023/10/31 16:13
加载中...