CF1367 D. Task On The Board(构造)

简介: CF1367 D. Task On The Board(构造)

linkkkk

题意:

给出字符串s,给出m个数b

要求从s选m个不重复的位置,使得对于每个i ( 1 < = i < = m ) ,满足如果s i < s j

思路:

对于b i = = 0的位置放最大的数。

这样就可以每放一个数都更新一下b i

然后一直选择符合条件的最大字母就可以了

如果字母的个数大于等于0的个数就可以将0的位置全放那个字母

然后记得每个字母只能用一次,用完了要及时向前移动指针

1baba210ans=ab

代码:

// Problem: D. Task On The Board
// Contest: Codeforces - Codeforces Round #650 (Div. 3)
// URL: https://codeforces.com/problemset/problem/1367/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;typedef unsigned long long ull;
typedef pair<ll,ll>PLL;typedef pair<int,int>PII;typedef pair<double,double>PDD;
#define I_int ll
inline ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
#define read read()
#define rep(i, a, b) for(int i=(a);i<=(b);++i)
#define dep(i, a, b) for(int i=(a);i>=(b);--i)
ll ksm(ll a,ll b,ll p){ll res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}return res;}
const int maxn=4e5+7,maxm=1e6+7,mod=1e9+7;
int a[30],b[55];
char ans[55];
vector<int>v;
int main(){
  int _=read;
  while(_--){
    string s;cin>>s;
    int m=read;
    rep(i,1,m) b[i]=read,ans[i]='*';
    memset(a,0,sizeof a);
    for(int i=0;s[i];i++) a[s[i]-'a']++;
    int pos=25;
    while(1){
      v.clear();
      int zero=0,cnt=0;
      rep(i,1,m){
        if(ans[i]!='*'){
            cnt++;continue;
        }
        if(!b[i]) v.push_back(i),zero++;
      }
      if(cnt==m) break;
      while(a[pos]<zero) pos--;
      a[pos]-=zero;
    //  cout<<zero<<" "<<pos<<endl;
      rep(i,1,m){
          if(ans[i]!='*') continue;
        if(!b[i]) ans[i]=char(pos+'a');
        else{
          for(auto tt:v) b[i]=b[i]-abs(i-tt);
        }
      }
      pos--;
      //cout<<pos<<endl;
    }
    rep(i,1,m) cout<<ans[i];
    puts("");
  }
  return 0;
}



目录
相关文章
|
3月前
|
XML 数据格式
成功解决:不允许有匹配 “[xX][mM][lL]“ 的处理指令目标。
这篇文章讨论了一个XML解析时出现的错误,错误提示为“不允许有匹配 '[xX][mM][lL]' 的处理指令目标”。文章指出错误原因是配置文件开始位置存在空行,导致XML文档的解析出现问题。解决方法是删除这些空行,之后程序能够成功启动。
成功解决:不允许有匹配 “[xX][mM][lL]“ 的处理指令目标。
C++ --- error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”
C++ --- error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”
300 0
|
人工智能 vr&ar
CF455D Serega and Fun(分块+deque)
CF455D Serega and Fun(分块+deque)
181 0
|
Windows
CF709D. Recover the String(构造)
CF709D. Recover the String(构造)
86 0
CF1286B.Numbers on Tree(构造 dfs)
CF1286B.Numbers on Tree(构造 dfs)
98 0
组装数据- 对象里面是key:value, value里面是数组的形式,如 {key:[aa,bb], key:[cc,dd]}
组装数据- 对象里面是key:value, value里面是数组的形式,如 {key:[aa,bb], key:[cc,dd]}
组装数据- 对象里面是key:value, value里面是数组的形式,如 {key:[aa,bb], key:[cc,dd]}
Lexicography——CF1267L构造题
Lucy likes letters. She studied the definition of the lexicographical order at school and plays with it. At first, she tried to construct the lexicographically smallest word out of given letters. It was so easy! Then she tried to build multiple words and minimize one of them. This was much harder!
267 0
|
Java 编译器
Java堆栈,以及eqauls和==的区别
Java堆栈,以及eqauls和==的区别
136 0