<stdio.h>
<set>
<stdlib.h>

void setMap(int ,int );
void search(int id);

std::set<int> map[1002];//グラフのつながりを表す
bool moveOK[1002];


int main()
{
int v,d;
while(scanf("%d",&v)!=EOF){
	scanf("%d",&d);
	setMap(v,d);
}

}

void setMap(int v,int d){

int fibo[1002];
fibo[0]=1;
fibo[1]=2;
for(int i=0;i<1002;i++){
	moveOK[i]=true;
	map[i].clear();
}

for(int i=2;i<=v;i++) fibo[i]=(fibo[i-1]+fibo[i-2])%1001;

for(int i=1;i<=v;i++){
	for(int j=1;j<=v;j++){
		if(i==j) continue;
		if(abs(fibo[i]-fibo[j])<d){
			map[fibo[i]].insert(fibo[j]);
			map[fibo[j]].insert(fibo[i]);
		}
	}
}
int count=0;
for(int i=1;i<=v;i++){
	if(moveOK[fibo[i]]==true){
		count++;
		search(fibo[i]);
	}
}
printf("%d\n",count);
}

void search(int id){
moveOK[id]=false;
std::set<int>::iterator it;
it=map[id].begin();
while(it!=map[id].end()){
	if(moveOK[*it]==true){
		search(*it);
	}
	it++;
}
}

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年05月04日 10:48