码迷,mamicode.com
首页 > 其他好文 > 详细

Educational Codeforces Round 25 D - Suitable Replacement(贪心)

时间:2017-07-17 23:50:03      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:分布   for   codeforce   div   ++   ret   说明   cout   code   

 题目大意:给你字符串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 }

 

Educational Codeforces Round 25 D - Suitable Replacement(贪心)

标签:分布   for   codeforce   div   ++   ret   说明   cout   code   

原文地址:http://www.cnblogs.com/fu3638/p/7197511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!