#include #include void setData(int); int main() { int n; scanf("%d",&n); while(n!=0){ setData(n); scanf("%d",&n); } } void setData(int n){ std::set rings[101];//リングのつながりを確保 std::set parts;//出てきた番号を保持 int a,b; for(int i=0;i > memo[101];//紐のメモ化探索、たどってきた番号を保存 std::set add;//最初に一つだけの番号の鎖を作る std::set::iterator it=parts.begin(); while(it!=parts.end()){ add.insert(*it); memo[(*it)].insert(add); add.clear(); it++; } std::set >::iterator memoIt;//メモ化探索で一つ先を調べる std::set::iterator subMemo;//メモ化の一つのセットを保持 std::set::iterator comIt;//リングの結合をたどる int count; //ここから先書きかけ。 for(int i=0;i0) (*memoIt).erase(subMemo); if(subMemo==(*memoIt).end()) break; memoIt++; } it++; } } }