[CF825D] Suitable Replacement (贪心乱搞)

题目链接:http://codeforces.com/problemset/problem/825/D

题意:给两个字符串s t,s中有一些问号。现在问号可以替换为任意字符,s字符串可以任意换位置,希望让t在s中出现次数最多。

统计s中各个字符出现次数,一直扫t,用s中与t相同字符抵消,不能抵消就用问号抵消。直到问号没有为止。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 typedef pair<int, int> pii;
 5 const int maxn = 1000100;
 6 int a[256];
 7 char s[maxn], t[maxn];
 8 vector<int> pos;
 9
10 signed main() {
11     // freopen("in", "r", stdin);
12     while(~scanf("%s%s",s,t)) {
13         memset(a, 0, sizeof(a));
14         int n = strlen(t);
15         pos.clear();
16         for(int i = 0; s[i]; i++) {
17             if(s[i] != ‘?‘) a[s[i]]++;
18             else pos.push_back(i);
19         }
20         if(!pos.size()) {
21             puts(s);
22             continue;
23         }
24         int k = 0;
25         while(k < pos.size()) {
26             for(int i = 0; t[i]; i++) {
27                 if(a[t[i]]) a[t[i]]--;
28                 else s[pos[k++]] = t[i];
29                 if(k >= pos.size()) break;
30             }
31         }
32         puts(s);
33     }
34     return 0;
35 }
时间: 2024-11-09 05:45:07

[CF825D] Suitable Replacement (贪心乱搞)的相关文章

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

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

Codeforces 723c [贪心][乱搞]

/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一个n和m. 第二行给n个数. 每次操作可以把n个数中的任何一个数替代为别的数,问最少的操作次数使得1.2.3.4.5...m中的数出现的次数的最小值尽可能大. 输出这个数,输出最少操作次数,输出替换后的数组. 思路: 1.显然,最小值尽可能大,这个值是可以确定的,即n/m; 2.还有,为使得操作次数最少,我们发现最多有n%m个没有贡献的无关值无需更改... 3.这题实际上可以n^2复杂度,因为n只有2000.但是本渣作死,写了nlogl

Codeforces 825D Suitable Replacement - 贪心 - 二分答案

You are given two strings s and t consisting of small Latin letters, string s can also contain '?' characters. Suitability of string s is calculated by following metric: Any two letters can be swapped positions, these operations can be performed arbi

Codeforces 732e [贪心][stl乱搞]

/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变压器供应. 问最多能使得多少个插座与电脑匹配,使得电压一致. 如果有多种方案,输出需要变压器总数最小的那种. 输出匹配数量 输出每个插座需要接多少个变压器.输出每台电脑匹配哪个插座. 思路: 贪心 乱搞 先从小到大将插座排序,然后从地第一个插座开始,不断除以2上取整.不断找是否可以匹配.找到匹配就停

UVA 11853 [dfs乱搞]

/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边的入口和出口的坐标. 思路: dfs乱搞题.把炮弹辐射范围连在一起的炮弹看作一个整体,记录下它围起来的边界区域. 然后找到最北边的输出. */ #include<bits/stdc++.h> using namespace std; double x[1005],y[1005],r[1005];

学渣乱搞系列之dp斜率优化

学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很大部分参考了大神Accept的文章,不过此神貌似早已绝迹江湖,这篇文章写得好,也写得很差,前半部分叙述得很好,可是关键,关键部分说得很乱,有些许错误,很多大神都进行了评论指出,但是大神Accept貌似没有修改的意思,故重新总结下,以便自己以后查阅和复习啊. 下面看一个例题Print Article.

Bucharest, Romania 2013 H Red John Game 乱搞 未解

题意:给你一个无限的棋盘,里面有n×n的棋子,每个棋子可以跳过一个相邻(4个方向)棋子跳到下一个位置,并把他的相邻位(他跳过的那一位)删除. 解题思路:判断n%3 是否等于 0 , 原因未知. 解题代码: 1 #include<stdio.h> 2 int main(){ 3 int n ; 4 while(~scanf("%d",&n)) 5 { 6 if(n%3) 7 printf("1\n"); 8 else printf("0\

【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Status][Discuss] Description 文章是一些单词组成的序列,单词由字母组成.你的任务是将一篇文章的单词填充到一个网格中,其中网格包含W列和足够多的行.为了布局之美,以下限制都需要满足. 1.文章中的文字需要按照原有的顺序放置.下图表示了将4个单词的文章“This is a pen”放入

【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][Discuss] Description GTY召唤了n个人来做实验,GTY家的房子很大,有m个房间一开始所有人都在1号房间里,GTY会命令某人去某个房间等待做实验,或者命令一段区间的房间开始实验,实验会获得一些实验信息点数,点数为房间里的人数,如果一个房间里的一群人已经做过实验了那么这些人将不会增