1. 程式人生 > >hdu 4235 Vampire Numbers 模擬+優化

hdu 4235 Vampire Numbers 模擬+優化

開始一直wa,想不通,後來發現x=100W但下一個vp數可能大於100W,陣列越界了。多開10W又如何- -!

#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;

const int N=1100000;
int ans[N],num[10];

void func(int k,int c){
	while(k){
		num[k%10]+=c;
		k/=10;
	}
}

int check(int a,int b,int n){
	memset(num,0,sizeof num);
	func(a,1),func(b,1),func(n,-1);
	for(int i=0;i<10;i++)
		if(num[i]!=0) return 0;
	return 1;
}

int isvp(int n){
	int l=sqrt(1.0*n);
	for(int i=2;i<=l;i++){
		if(n%i!=0) continue;
		if(check(i,n/i,n))	 return 1;
	}
	return 0;
}

int find(int n){
	if(ans[n]!=0)//已經存在
		return ans[n];
	if(isvp(n))//是vp數
		return ans[n]=n;
	return ans[n]=find(n+1);//下一個vp數
}

int main(){
	int n;
	while(~scanf("%d",&n)&&n){
		if(ans[n]==0)
			find(n);
		printf("%d\n",ans[n]);
	}
	return 0;
}