模板网站建设方案,做商城网站用什么框架,注册商贸公司需要什么条件,如何将微信公众号文章转wordpress传送门
A. Is It a Cat?
题意 给你一个只有英文字母的字符串#xff0c;问你这个字符串是否由连续的’m’, ‘e’, ‘o’,‘w’,#xff08;顺序不能改变#xff09;构成#xff0c;并且不区分大小写。 如#xff1a; “meow”, “mmmEeOWww”, “MeOooOw” 是符合要求…传送门
A. Is It a Cat?
题意 给你一个只有英文字母的字符串问你这个字符串是否由连续的’m’, ‘e’, ‘o’,‘w’,顺序不能改变构成并且不区分大小写。 如 “meow”, “mmmEeOWww”, “MeOooOw” 是符合要求的, 但是 “Mweo”, “MeO”, “moew”, “MmEW”, meowmeow是不符合的 思路 对于不同的字符串直接加入到新字符串中然后和“MEOW”对比是否一致即可记得大小写一致。 代码
void slove( )
{int t;cinn;string s;//meowcins;bool st10,st20,st30,st40,st50;for(int i 0;in;i){if(s[i]a)s[i]-(a-A);}string a;for(int i0;in;i){if(s[i]!s[i1])as[i];} if(aMEOW)coutYES\n;else coutNO\n;
B. Count the Number of Pairs
题意 给你一个只有英文字母的字符串s如果两个满足字符满足大小写关系那么就说明他们是配对的。每对成功配对后的字符不可重复配对。给你一个k你可以对任意字符进行大小写交换操作最多k次问你这个字符串最多有多少个配对。 思路 用map存储每一个字符出现的次数然后先加上大小写共有的字符数量然后再根据k的值进行操作即可。 代码
void slove( )
{int k;cinnk;string a;cina;mapint,intq;for(int i 0;in;i)q[a[i]];int res0;for(int i a;iz;i){int li-(a-A);if(q[i]q[l])swap(q[i],q[l]);resq[l];if(k){resmin((q[i]-q[l])/2,k);k-min((q[i]-q[l])/2,k);}} coutres;coutendl;
}C2/c1. Powering the Hero (hard version)
题意 按顺序给你n张卡牌这些卡牌分为两类力量牌和角色牌。对于力量牌你可以把它放在你的力量牌顶对于角色牌初始力量为0你可以消耗最上方的力量牌排融入其中。问你他的所有角色的力量和的最大值是多少 思路 对于每一张角色牌时他能获得的最大力量值就是他前面的最大的一张力量排那么可以直接用优先队列去对力量值进行排序然后取值即可。 void slove( )
{cinn;for(int i 1;in;i)cinstt[i];ll res0,k0;priority_queue int,vectorint,lessint q;for(int i 1;in;i){if(stt[i]!0)q.push(stt[i]);else if(q.size()) {resq.top();q.pop();}}coutrescoutendl;
}
D. Remove Two Letters
题意 给你一个长度为n的小写字符串问你任意去除两个相邻的字符串之后不同的字符串的种类有多少 思路 一眼我是STL大神, 直接map存字符串结果荣获mle5 可以用字符串哈希但是这道题明显有更简单的方法。首先 如果考虑最优情况最多的不同的字符串种类肯定是n-1种那么在此前提下我们去找相同的情况 因为由样例“ababa”可以发现 如果s[i]s[i2]那么两次删除的字符串是相同的那么直接遍历一遍如果存在就ans–最后直接输出即可。 代码
void slove( )
{int t;cinn;cina;int sumn-1;for(int i 0;in;i){if(a[i]a[i2]i2n)sum--;}coutsum;coutendl;
}E2/E1 Unforgivable Curse (hard version)
题意 给你两个长度为n的只有英文的字符串a,b然后给你一个k你可以使si和s(ik)或者si和s(ik1)交换问你能否通过任意次交换使得ab字符串相等。 思路 假设是长度为(k1)的字符串那么就只能对于s1和s1k进行交换那么此时看换之前和换之后如果满足条件否则无论怎么都满足不了 那么如果是小于(k1)长度的字符串呢那么这种字符串就是完全不能交换即如果开始能满足就是YES不能为NO。 如果是大于(k1)长度的那么从k1开始看起当nk2时能任意交换的数字有开头两个和结尾两个长度每次加1能任意交换的数字就2末尾和不能交换的数字的最左边) 例abcdef 和k为4那么能够任意交换的字符为abef,如果n为abcdefg那么能够任意交换的字符为abcefg 那么可以取这部分范围内不可交换的字串判断一下如果相等也是可以交换的直到n为2*k的时候所有的字符都可以任意交换。 代码
void slove()
{int k;cinnk;string a, b;cin a b;mapint, int p, q;for (int i 0; i n; i)q[a[i]], p[b[i]];for (int i 0; i n; i){if (q[a[i]] ! p[a[i]]){cout NO\n;return;}}if (a b||k1){cout YES\n;return;}if(nk1)coutNO\n;else if(nk1){swap(a[0],a[n-1]);if(ab)coutYES\n;else coutNO\n;}else if(n2*k) coutYES\n;else{aa.substr(n-k,2*k-n);bb.substr(n-k,2*k-n);if(ab)coutYES\n;else coutNO\n;}
}总结感觉这一场打的还行d题也没有特别的无脑wa但是下次还可以少wa点e的思路差不多都有了但是写出d后没那么多想法了就有点水群以后要记得全力以赴