CodeForces 518B Tanya and Postcard (题意,水题)

题意:给定两个字符串,然后从第二个中找和第一个相同的,如果大小写相同,那么就是YAY,如果大小写不同,那就是WHOOPS。YAY要尽量多,其次WHOOPS也要尽量多。

析:这个题并不难,难在读题懂题意。首先把两个字符串的的每个字符存起来,然后,先扫一遍,把所有的能YAY的都选出来,剩下的再尽量先WHOOPS。

代码如下:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <cstring>
#include <cmath>
#include <map>
#include <cctype>

using namespace std;
const int maxn = 1000 + 5;
map<char, int> mp1;
map<char, int> mp2;
string s1, s2;

int main(){
    cin >> s1 >> s2;
    for(int i = 0; i < s1.size(); ++i)
        ++mp1[s1[i]];
    for(int i = 0; i < s2.size(); ++i)
        ++mp2[s2[i]];

    int cnt1 = 0, cnt2 = 0;
    for(int i = 0; i < 26; ++i){
        if(mp1[i+‘a‘] >= mp2[i+‘a‘]){
            cnt1 += mp2[i+‘a‘];
            mp1[i+‘a‘] -= mp2[i+‘a‘];
            mp2[i+‘a‘] = 0;
        }else{
            cnt1 += mp1[i+‘a‘];
            mp2[i+‘a‘] -= mp1[i+‘a‘];
            mp1[i+‘a‘] = 0;
        }
        if(mp1[i+‘A‘] >= mp2[i+‘A‘]){
            cnt1 += mp2[i+‘A‘];
            mp1[i+‘A‘] -= mp2[i+‘A‘];
            mp2[i+‘A‘] = 0;
        }else{
            cnt1 += mp1[i+‘A‘];
            mp2[i+‘A‘] -= mp1[i+‘A‘];
            mp1[i+‘A‘] = 0;
        }
    }
    for(int i = 0; i < 26; ++i){
        if(mp1[i+‘a‘])  cnt2 += min(mp1[i+‘a‘], mp2[i+‘A‘]);
        if(mp1[i+‘A‘])  cnt2 += min(mp1[i+‘A‘], mp2[i+‘a‘]);
    }
    printf("%d %d\n", cnt1, cnt2);
    return 0;
}
时间: 2024-10-25 13:59:54

CodeForces 518B Tanya and Postcard (题意,水题)的相关文章

CodeForces 682B Alyona and Mex (题意水题)

题意:给定一个序列,你可以对这里面的数用小于它的数来代替,最后让你求,改完后的最大的序列中缺少的最小的数. 析:这个题,读了两个多小时也没读懂,要是读懂了,肯定能做出来...没什么可说的,就是尽量凑1 2 3 4 5...如果没有了,就输出. 代码如下: #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; int a[maxn]; int main(){ int n; while(cin >>

codeforces 518B. Tanya and Postcard

题意:给出字符串 s 和 t,如果 t 中有跟 s 完全相同的字母,数量等于或者多过 s,就将 s 这个数量加到 YAY! 的答案里,少于的话就加 t 中有的数量:如果 t 中有跟 s 相同的字母但是大小写不对应(例如A-a,z-Z),就加到 WHOOPS 的答案里. 解题思路:开两个大小为52的数组cs[],ct[],分别存a~z和A~Z的字母的个数,遍历两个字符串,使cs,ct数组分别有值 遍历两个数组,将相同下标(比如i)时两个数组中存储数据的最小值加到yay变量中,然后将cs[i],ct

codeforces 707A A. Brain&#39;s Photos(水题)

题目链接: A. Brain's Photos 题意: 问是黑白还是彩色; 思路: 没有思路: AC代码: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <bits/stdc++.h> #include <stack> #include <map> u

【Codeforces 368A】Brain&#39;s Photos 水题

黑白灰都是#Black&White #include <cstdio> int n,m; int main() { scanf("%d%d",&n,&m); int ok=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { char s[5]; scanf("%s",s); if(s[0]!='W'&&s[0]!='B'&&s[0]!='G')

CodeForces 690C1 Brain Network (easy) (水题,判断树)

题意:给定 n 条边,判断是不是树. 析:水题,判断是不是树,首先是有没有环,这个可以用并查集来判断,然后就是边数等于顶点数减1. 代码如下: #include <bits/stdc++.h> using namespace std; const int maxn =1000 + 5; int p[maxn]; int Find(int x){ return x == p[x] ? x : p[x] = Find(p[x]); } int main(){ int n, m, x, y; cin

CodeForces 686A Free Ice Cream (水题模拟)

题意:给定初始数量的冰激凌,然后n个操作,如果是“+”,那么数量就会增加,如果是“-”,如果现有的数量大于等于要减的数量,那么就减掉,如果小于, 那么孩子就会离家.问你最后剩下多少冰激凌,和出走的孩子数量. 析:多水的一个题,就是一个模拟,如果是+,就加上,如果是‘-’,就判断一下,如果不够,就记录下来. 代码如下: #include <iostream> #include <cmath> #include <cstdlib> #include <set>

codeforces Gym 100187H H. Mysterious Photos 水题

H. Mysterious Photos Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/H Description Everyone probably heard the rumours about the constellation of Bermuda Triangle: any person who looks to this constellation of th

CodeForces 342B Xenia and Spies (水题模拟,贪心)

题意:给定 n 个间谍,m个区间,一个 s,一个f,然后从 s开始传纸条,然后传到 f,然后在每个 t 时间在区间内的不能传,问你最少的时间传过去. 析:这个题,就模拟一下就好,贪心策略,能传就传,找好方向,一直传就行,传到 f 就结束. 代码如下: #include <bits/stdc++.h> using namespace std; struct node{ int l, r, t; bool operator < (const node &p) const{ retur

CodeForces 342A Xenia and Divisors (水题)

题意:给定 n 个数(小于等于7),让你把它分成 m 组,每组有三个数,且满足,a < b < c,并且 a 能整除 b,b 能整除 c. 析:对于这个题,因为题目说了是不大于7的,那么一想不就三组数么,124,136,126.就这三组,然后确定每一组的数量,首先只有第二组有3,那么第二组的数量就确定了, 然后再看剩下的两组,只有第一组有4,那么第一组也就确定,然后剩下的就是第三组,当然第三组只有6. 代码如下: #include <bits/stdc++.h> using nam