zoukankan      html  css  js  c++  java
  • cf1367D---构造

    题目链接:https://codeforces.com/contest/1367/problem/D

    简单题意:给定原字符串s,要求删去一些字符得到新字符串t,使得ti与比它大的distance总和=bi

    构造。对于当前未访问过的bi=0的位置(可能不止一个),填上当前未使用的最大字符(如果数量足够的话),并把数组b的其他位置的值,减去到当前bi=0位置的distance。此时又会产生新的bi=0的位置,进行同样的构造即可

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    
    int i,j,m,q,len;
    int vis[100],b[100],num[100];
    char s[100];
    
    int main(){
    	cin>>q;
    	while (q--){
    	  char ans[100];
    	  cin>>s+1>>m;len=strlen(s+1);
    	  for (i=1;i<=m;i++) cin>>b[i];
    	  memset(vis,0,sizeof(vis));
    	  memset(num,0,sizeof(num));
    	  for (i=1;i<=len;i++) num[s[i]-'a'+1]++;
    	  int k=26;
    	  while (1){
    	  	int f=0;
    		vector<int> v;
    	  	for (i=1;i<=m;i++)
    	  	  if (vis[i]==0){ 
    	  	  	f=1;
    	  	  	if (b[i]==0) v.push_back(i);
    		  }
    	    if (f==0) break;
    	    while (num[k]<v.size()) k--; //*
    	    for (i=0;i<v.size();i++){
    	      ans[v[i]]=k+'a'-1;vis[v[i]]=1;
    		}
    		k--;
    		for (i=0;i<v.size();i++)
    		  for (j=1;j<=m;j++)
    		    if (vis[j]==0) b[j]-=abs(v[i]-j); //*
          }
          for (i=1;i<=m;i++) cout<<ans[i];cout<<endl;
     	}
    	return 0;
    }
    

      

  • 相关阅读:
    cmd 一键获取 所有连接过的wifi 密码
    MYSQL注入语句
    Web安全篇之SQL注入攻击
    Kali Linux 不能联网上网 解决方法
    php杂项
    laravel下的数据序列化
    填充数据
    css
    array
    GD库常用函数
  • 原文地址:https://www.cnblogs.com/edmunds/p/13398334.html
Copyright © 2011-2022 走看看