#include #include #include void tuubunn2(int &d,int &m){ //ただ単に分子と分母を小さくする for(int i=2;i<=m;){ if(d%i==0 && m%i==0){ d/=i; m/=i; }else{ i++; } } } struct timing{ //楽器のならされるタイミングをtime=(double)m/dで保持する関数 double time; int d,m; void set(int td,int tm){ //td分母tm分子 if(tm==0){ time=m=0; d=1; return ; } int min=td>tm?tm:td; tuubunn2(td,tm); m=tm;d=td; time=(double)tm/(double)td; } bool operator<(const timing t)const{ return time music;//楽器のならされるタイミングとならされる音を分数単位の時間と10進数で保持 std::map allMusic;//無音も含めた場合 timing t;//一回の楽器の音を管理 int tempC;//ならされる音を10進数に直して代入 for(int i=0;i::iterator it=music.begin(); std::map::iterator nextIt,ansIt; if(music.size()==0){ printf("00\n");//楽譜が無音のみなら00を出力 return ; }else if(music.size()==1){ //音が一回しかならされないなら if((*allMusic.begin()).second==0){ ansIt=allMusic.begin(); nextIt=music.begin(); }else{ printf("%02X\n",(*it).second); return; } }else{ //ならされる音の最小間隔を求める it=music.begin(); nextIt=it; nextIt++; double minTime=100,cTime; while(nextIt!=music.end()){ cTime=(*nextIt).first.time-(*it).first.time; if(cTime1024) continue; for(int i=0;i