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[i]分别减去那个最小值;、

      遍历cs数组的0~25,ct数组的26~51,将相同下标(比如i)时两个数组中存储数据的最小值加到whoop变量中

      遍历ct数组的0~25,cs数组的26~51,将相同下标(比如i)时两个数组中存储数据的最小值加到whoop变量中

代码如下:

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<string.h>
 5 using namespace std;
 6 #define maxlen 200001
 7 #define N 52
 8 char s[maxlen],t[maxlen];
 9 int cs[N],ct[N];
10 int getid(char ch){
11     if(ch>=‘a‘&&ch<=‘z‘)
12         return ch-‘a‘;
13     else
14         return ch-‘A‘+26;
15 }
16 int main()
17 {
18     int ls,lt;
19     while(scanf("%s%s",s,t)!=EOF){
20         getchar();
21         ls=strlen(s);
22         lt=strlen(t);
23         memset(cs,0,sizeof(cs));
24         for(int i=0;i<ls;i++){
25             cs[getid(s[i])]+=1;
26         }
27         memset(ct,0,sizeof(ct));
28         for(int i=0;i<lt;i++){
29             ct[getid(t[i])]+=1;
30         }
31         int yay=0,whoop=0;
32         int p;
33         for(int i=0;i<N;i++){
34             p=min(cs[i],ct[i]);
35             cs[i]-=p;
36             ct[i]-=p;
37             yay+=p;
38         }
39         for(int i=0;i<26;i++){
40             p=min(cs[i], ct[i+26]) + min(cs[i+26], ct[i]);
41             whoop+=p;
42         }
43         printf("%d %d\n",yay,whoop);
44     }
45     return 0;
46 }
时间: 2024-10-29 07:42:02

codeforces 518B. Tanya and Postcard的相关文章

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

题意:给定两个字符串,然后从第二个中找和第一个相同的,如果大小写相同,那么就是YAY,如果大小写不同,那就是WHOOPS.YAY要尽量多,其次WHOOPS也要尽量多. 析:这个题并不难,难在读题懂题意.首先把两个字符串的的每个字符存起来,然后,先扫一遍,把所有的能YAY的都选出来,剩下的再尽量先WHOOPS. 代码如下: #include <iostream> #include <cstdio> #include <algorithm> #include <vec

[2016-03-31][codeforces][659C][Tanya and Toys]

时间:2016-03-31 23:49:13 星期四 题目编号:[2016-03-31][codeforces][659C][Tanya and Toys].md 题目大意:有$10^9$种物品,第i种物品价值i,已经用用n个物品,给m元,问最多能买多少个还没拥有的物品 分析:贪心,从最低的开始买起,假设$m = 10^9$,那么也买的物品也不超过$10^6$个,因为$\frac{(1+k)k}{k} < 10^9$ 遇到的问题:答案可能为0 #include <algorithm> #

codeforces 659C Tanya and Toys

题目链接:http://codeforces.com/problemset/problem/659/C 题意: n是已经有的数字,m是可用的最大数字和 要求选自己没有的数字,且这些数字的数字和不能超过m 且要求可选的数字的数目越多越好 输出一种答案即可 解题思路: 刚开始想开一个bool型的1e9的数组,然后判断即可 可是交上去发现内存超限 后来把1e9的数组改成2*1e6的数组即可 具体原因应该从数学数字和方面考虑 具体代码如下: #include<bits/stdc++.h> using

CodeForces - 508D Tanya and Password(欧拉通路)

Description While dad was at work, a little girl Tanya decided to play with dad's password to his secret database. Dad's password is a string consisting of n + 2 characters. She has written all the possible n three-letter continuous substrings of the

codeforces 508D . Tanya and Password 欧拉通路

题目链接 给你n个长度为3的子串, 这些子串是由一个长度为n+2的串分割得来的, 求原串, 如果给出的不合法, 输出-1. 一个欧拉通路的题, 将子串的前两个字符和后两个字符看成一个点, 比如acb, 就是ac->cb. 然后建图. 1 #include <iostream> 2 #include <vector> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm>

Codeforces 526D Tanya and Password kmp

题意:给你一个字符串 ,问你前对于任意一个前缀能不能组成  A+B+A+B...+B+A 这种形式. 解题思路:在next数组上面乱搞,判断前缀是否循环 ,循环是否为K还是K+1,为K的时候往后DP看最多能符合条件的前缀串. 解题代码: 1 // File Name: d.cpp 2 // Author: darkdream 3 // Created Time: 2015年04月06日 星期一 15时36分38秒 4 5 #include<vector> 6 #include<list&

Codeforces 508D Tanya and Password

题意: n(10^5)个串每个串3个字符  两个串abc.xyz能拼在一起前提是b=x&&c=y  它们能拼成ab(x)c(y)z  求n个串品在一起的串 思路: 将串abc变成ab->bc的一条边  则原题变成了有向图的欧拉路径问题 有向图欧拉路径算法就是遍历  因为欧拉路径其实就是"每条边走一遍" 代码: #include<cstdio> #include<iostream> #include<cstring> #inclu

CodeForces 518B - Han Solo and Lazer Gun(模拟)

题意:给定两个串(长度范围为 1 ~ 2*10^5,两串长度不一定相同,由大.小写字母构成),需要让两串中完全相同字母匹配的尽量多,在此前提下,再让同一字母但大小写不同的对数尽量多. 先尽量多的完全相同匹配,然后再尽量多的匹配大小写不同的字母即可 #include<cstdio> #include<cstring> #include<cctype> #include<cstdlib> #include<cmath> #include<ios

Codeforces 508D Tanya and Password 欧拉通路Euler

题目链接:点击打开链接 题意:给定n个长度为3各不相同的字符串,猜一个n+2位的密码. 这个密码包含上面的所有字符串 思路: 把 abc 拆成ab -> bc 则得到一个图,目标就是走遍所有 ab->bc 这样的边,也就是找一条欧拉通路. #include <cstdio> #include <algorithm> #include <string.h> #include <queue> #include <cstring> #inc