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;
}



目录
相关文章
|
5月前
|
语音技术 Python
语音识别,continue和break的使用,循环综合案例,完成发工资案例,函数的初体验,len()是内置好的函数,def 函数名 def xxx(),函数的定义 def xxx() ,调用函数
语音识别,continue和break的使用,循环综合案例,完成发工资案例,函数的初体验,len()是内置好的函数,def 函数名 def xxx(),函数的定义 def xxx() ,调用函数
|
5月前
|
JavaScript 前端开发
continue、return、break三者的区别
continue、return、break三者的区别
|
机器学习/深度学习 人工智能 算法
CF1550A Find The Array(贪心算法)
CF1550A Find The Array(贪心算法)
38 0
if语句中(num=X)和(num==X)的区别
if语句中(num=X)和(num==X)的区别
112 0
if语句中(num=X)和(num==X)的区别
|
Go C++
Go-分支和循环总结(if、else、switch、for、range、continue、break等)
Go-分支和循环总结(if、else、switch、for、range、continue、break等)
122 0
Go-分支和循环总结(if、else、switch、for、range、continue、break等)
CF1286B.Numbers on Tree(构造 dfs)
CF1286B.Numbers on Tree(构造 dfs)
101 0
|
Windows
CF709D. Recover the String(构造)
CF709D. Recover the String(构造)
90 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!
272 0
|
Go 索引
Go基础:range、循环控制Goto、Break、Continue
Go基础:range、循环控制Goto、Break、Continue
289 0