SRM412 div1 medium
実装。
”starting with the note that has the highest pitch , then the note with the
second -highest pitch , and so on .”
この文を見逃したので時間がかかった。
#include <algorithm> #include <iostream> #include <string> #include <vector> using namespace std; class StringsAndTabs { public: vector <string> transformTab(vector <string> tab, vector <int> stringsA, vector <int> stringsB, int d) { int AsN=stringsA.size(),tLen=tab[0].size(),BsN=stringsB.size(); vector<string> ans(BsN,string(tLen,'-')); for(int time=0;time<tLen;time++) { vector<int> pitch; for(int i=0;i<AsN;i++) { char c=tab[i][time]; if(c!='-') { int a=stringsA[i]+(('0'<=c && c<='9')?c-'0':c-'A'+10)+d; pitch.push_back(a); } } sort(pitch.begin(),pitch.end()); reverse(pitch.begin(),pitch.end()); bool b=true; for(int i=0;i<pitch.size();i++) { int minOpen=50; int st=-1; for(int j=BsN-1;0<=j;j--) if(ans[j][time]=='-') { int o=pitch[i]-stringsB[j]; if(0<=o && o<=35 && o<minOpen) minOpen=o,st=j; } if(st==-1) { b=false; break; } char c=(minOpen<10)?minOpen+'0':minOpen-10+'A'; ans[st][time]=c; } if(!b) for(int i=0;i<BsN;i++) ans[i][time]='x'; } return ans; } };
あと90問