A题
本题虽然是签到题,但是思路十分精巧,提醒我以后思考的时候可以多考虑进制转化的思路
因为本题要求第x个单词,又注意到备选单词的长度是相同的,可以想到用k进制的转化来思考
第x个即求x-1的k进制数,然后按照前后顺序来逐个遍历#号并替换,注意的是,不够要添0
#include<iostream> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<map> #include<vector> #include<cstdio> #include <unordered_map> using namespace std; const int N=2000005; const int inf=0x3f3f3f3f; typedef long long ll; vector<int> num; vector<char> c; int main(){ int n,m,k; ll x; string s; cin>>n>>m>>k>>x; char t; cin>>s; int i,j; x-=1; while(x){ num.push_back(x%k); x/=k; } int mid=m-(int)num.size(); for(i=0;i<mid;i++) num.push_back(0); m-=1; for(i=0;i<n;i++){ if(s[i]=='#'){ for(j=0;j<k;j++){ cin>>t; c.push_back(t); } sort(c.begin(),c.end()); cout<<c[num[m]]; m--; c.clear(); } else cout<<s[i]; } cout<<endl; }