求问:为何在洛谷全WA却在别的OJ上全AC
查看原帖
求问:为何在洛谷全WA却在别的OJ上全AC
268771
hypotenuse_legs楼主2020/11/8 19:24

我打了一份 FBI 树的代码,得到的结果是在洛谷全 WA,在 ACwing 和牛客上 AC,同时也通过了样例数据。

那么问题来了:是不是洛谷的什么地方出了问题?

附:提交结果(分别表示洛谷、ACwing、牛客上的提交结果)

以及提交的代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long lnt;
lnt n;
bool a[1030];

inline lnt read()
{
	lnt x=0,f=1;
	char ch=getchar();
	while(ch<48 or ch>57){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>=48 and ch<=57){
		x=(x<<3)+(x<<1)+ch-48;
		ch=getchar();
	}
	return x*f;
}

void dfs(lnt l,lnt r)
{
	lnt mid=(l+r)>>1;
	//printf("l=%lld, r=%lld\n",l,r);
	if(l==r)
	{
		if(a[l]==0) printf("B");
		else printf("I");
		return;
	}
	dfs(l,mid);
	dfs(mid+1,r);
	lnt tag=0,la=0;//tag=0表示B串,=1表示I串,=2表示F串。 
	for(lnt i=l;i<=r;++i){
		if(i==l){
			if(a[i]==0) tag=0;
			else tag=1;
			la=a[i];
			continue;
		}
		if(a[i]!=la){
			tag=2;
			break;
		}
	}
	switch(tag)
	{
		case 0:printf("B");return;
		case 1:printf("I");return;
		case 2:printf("F");return;
	}
}
int main()
{
	n=read();
	lnt m=pow(2,n);
	for(lnt i=1;i<=m;++i) a[i]=getchar()-48;
	dfs(1,m);
	return 0;
}
2020/11/8 19:24
加载中...