タイトル
この質問は、タイトルに署名することですが、アイデアは非常にデリケートである、あなたは、バイナリ変換のアイデアを考えることができたとき、私は将来を考える思い出させるが、
この質問の長さはx番目の単語を必要とするだけでなく、代替の単語が同じであることを指摘しているので、あなたがk-aryの考えるように変換を使用して考えることができます
すなわち、x番目の要求がトラバース及び#代替前後順序に従ってK進数1をX、及びその後一つずつ、それが注目され、0を追加しません
#include <iostreamの> する#include <CStringの> する#include < ストリング > の#include <cmath> の#include <アルゴリズム> の#include <マップ> の#include <ベクトル> の#include <cstdioを> する#include <unordered_map> 使用して 名前空間STDを、 const int型 N = 2000005 ; const int型 INF = 0x3f3f3f3f 。 typedefの長い 長いLL。 ベクトル < int型 > NUM; ベクトル < 文字> C; INT のmain(){ int型N、M、K。 LLのx; 文字列sの。 CIN >> N >> M >> K >> X。 文字T; cinを >> 秒; int型私は、jは、 X - = 1 ; 一方、(X){ num.push_back(X%K)。 X / = K。 } INT半ば= M-(INT )num.size(); 以下のための(私は= 0 ; I <半ばを、I ++ ) num.push_back(0 ); M - =1 ; 以下のために(私は= 0 ; iが<N; iが++ ){ もし、(S [I] == ' #' ){ ため(J = 0 ; J <K、J ++ ){ CIN >> T。 c.push_back(T)。 } ソート(c.begin()、c.end())。 COUT << C [NUM [M]。 M - 。 c.clear(); } 他 COUT << S [i]は、 } COUT << ENDL。 }