「1016FibonacciSets」の編集履歴(バックアップ)一覧はこちら
「1016FibonacciSets」(2011/05/04 (水) 10:48:07) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
#include <stdio.h>
#include <set>
#include <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++;
}
}