zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 25 D

     题目大意:给你字符串s,和t,字符串s中的'?'可以用字符串t中的字符代替,要求使得最后得到的字符串s(可以将s中的字符位置两两交换,任意位置任意次数)中含有的子串t最多。

    解题思路: 因为知道s中的字符位置可以交换无数次,所以只要s中含有可以组成t的字符就一定可以出现子串t。所以就是要令t中的字符数量尽量平均地分布在s中。

    代码:

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 int str[300];
     5 
     6 int main(){
     7     string s,t;
     8     cin>>s>>t;
     9     for(int i=0;i<s.size();i++){
    10         if(s[i]!='?')
    11             str[s[i]-'a']++;
    12     }
    13     int k=0;
    14     int d=t.size();
    15     for(int i=0;i<s.size();i++){    
    16         if(s[i]=='?'){
    17             k++;
    18             k%=d;
    19             //说明这个字符出现次数比较多,把机会让给出现次数较少的字符 
    20             if(str[t[k]-'a']>0){
    21                 str[t[k]-'a']--;
    22                 i--;
    23             }
    24             else
    25                 s[i]=t[k];
    26         }
    27     }
    28     cout<<s<<endl;
    29     return 0;
    30 }
  • 相关阅读:
    Uri编码,包括javascript前端与C#服务器端
    快速排序
    bootstrap
    boosting
    bagging
    SHELL排序
    冒泡排序
    插入排序
    选择排序
    二叉树的数学性质
  • 原文地址:https://www.cnblogs.com/fu3638/p/7197511.html
Copyright © 2011-2022 走看看