「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++; } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: