求助
查看原帖
求助
755847
SJS_z楼主2024/3/9 10:09

这题我按照1,k,k(k+1)的初始值bfs按规律累加,小数据手算了一下应该没错,极限数据也没超100位,但是交上去就WA(wrong answer '3' appears more than once!),不知道什么原因,求调!

#include<bits/stdc++.h>
using namespace std;
struct huge_int{
	int len,num[1005];
};
huge_int huge_change(int m){
	huge_int a;
	a.len=0;
	memset(a.num,0,sizeof(a.num));
	while (m!=0){
		a.len++;
		a.num[a.len-1]=m%10;
		m/=10;
	}
	return a;
}
huge_int huge_add(huge_int a,huge_int b){
	huge_int c;
	c.len=max(a.len,b.len);
	memset(c.num,0,sizeof(c.num));
	for (int i=0;i<c.len;i++){
		c.num[i]=a.num[i]+b.num[i];
	}
	for (int i=0;i<c.len-1;i++){
		if (c.num[i]>=10){
			c.num[i+1]+=c.num[i]/10;
			c.num[i]%=10;
		}
	}
	if (c.num[c.len-1]>=10){
		c.num[c.len]+=c.num[c.len-1]/10;
		c.num[c.len-1]%=10;
		c.len++;
	}
	return c;
}
huge_int huge_minus(huge_int a,huge_int b){
	huge_int c;
	c.len=a.len;
	memset(c.num,0,sizeof(c.num));
	for (int i=0;i<c.len;i++){
		c.num[i]=a.num[i]-b.num[i];
	}
	for (int i=0;i<c.len-1;i++){
		if (c.num[i]<0){
			c.num[i+1]--;
			c.num[i]+=10;
		}
	}
	while (c.num[c.len-1]==0){
		c.len--;
	}
	return c;
}
huge_int multiply(huge_int a,huge_int b){
	huge_int ans;
	memset(ans.num,0,sizeof(ans.num));
	ans.len=a.len+b.len-1;
	for (int i=0;i<a.len;i++){
		for (int j=0;j<b.len;j++){
			ans.num[i+j]+=a.num[i]*b.num[j];
		}
	}
	for (int i=0;i<ans.len;i++){
		ans.num[i+1]+=ans.num[i]/10;
		ans.num[i]=ans.num[i]%10;
	}
	if (ans.num[ans.len]>0){
		ans.len++;
	}
	return ans;
}
void huge_print(huge_int a){
	for (int i=a.len-1;i>=0;i--){
		printf("%d",a.num[i]);
	}
}
struct group{
	huge_int a,b,c;
};
void bfs(int k,int n){
	queue<group> q;
	group g;
	g.a=huge_change(1);
	g.b=huge_change(k);
	g.c=huge_change(k*(k+1));
	q.push(g);
	for (int i=0;i<n;i++){
		group cg;
		cg=q.front();
		q.pop();
		huge_print(cg.a);
		printf(" ");
		huge_print(cg.b);
		printf(" ");
		huge_print(cg.c);
		printf("\n");
		group ng;
		ng.a=cg.b;
		ng.b=cg.c;
		ng.c=huge_minus(multiply(huge_change(k),huge_add(cg.b,cg.c)),cg.a);
		q.push(ng);
		ng.a=cg.a;
		ng.b=cg.c;
		ng.c=huge_minus(multiply(huge_change(k),huge_add(cg.a,cg.c)),cg.b);
		q.push(ng);
	}
}
int main(){
	int k,n;
	scanf("%d%d",&k,&n);
	bfs(k,n);
	return 0;
}
2024/3/9 10:09
加载中...