CF1367D Task On The Board
看到m的长度十分小时间复杂度可以高一点然后我们发现每一次b数组都会有0(可能有多个)。那这些个0肯定就是剩下的字符串中最大(ASCII)的字符。这样就做完了每次找0然后确定剩下的最大值填进去将值减去距离(不然就没法知道下一个0出现在哪里了)。#include bits/stdc.h using namespace std; int T,m; queue int q, qq; //记录有多少个0的位置 mapchar,int mp; //记录每个字符出现的次数 int a[55]; char ans[55]; //记录答案 bool vis[55]; //记录这个位置是否确定 string s; int main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cinT; while(T--){ cinsm; memset(vis,0,sizeof vis); mp.clear(); for(int i0;is.size();i){ mp[s[i]]; } for(int i1;im;i){ cina[i]; if(a[i]0){ qq.push(i); vis[i]1; } } swap(q,qq); char kz; while(mp[k]q.size()) k--; while(!q.empty()){ int tq.front(); q.pop(); for(int i1;im;i){ if(vis[i]1) continue; a[i]-abs(t-i); if(a[i]0){ qq.push(i); vis[i]1; } } ans[t]k; if(q.empty()){ swap(q,qq); k--; while(mp[k]q.size()k!a) k--; } } for(int i1;im;i){ coutans[i]; } cout\n; } return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444127.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!