首页 > 其他分享 >CodeForces 1883B Chemistry

CodeForces 1883B Chemistry

时间:2024-07-26 21:29:54浏览次数:8  
标签:字符 奇数 int CodeForces 1883B ++ num Chemistry 回文

题目链接:CodeForces 1883B【Chemistry】



思路

       判断最多删去k个字符后剩下的部分为回文字符串,所以优先删除将个数为奇数个的相同字符删为偶数,当最后留下的字符串中,奇数个数的相同字符种类小于等于1时才会是回文字符串,如:aaabbbccc,此时个数为奇数的相同字符种类有三种,分别为a,b,c,所以最少要将a,b,c三种中的两种字符分别删去一个,才能得到回文字符串,假设删去一个b和一个c,得到aaabbcc,排列后得到cbaaabc。所以先计算奇数个数的相同字符种类小于等于k + 1时,就可以通过操作得到回文串。


代码

#include <bits/stdc++.h>
using namespace std;

int num[30];
void solve() {
  int n, k;
  cin >> n >> k;
  string s;
  cin >> s;

  memset(num, 0, sizeof num);

  int len = s.size();
  for (int i = 0; i < len; i++) {
    num[s[i] - 'a']++;
  }

  int count = 0;
  for (int i = 0; i < 26; i++) {
    if (num[i] % 2)
      count++;
  }

  if (count - k <= 1) {
    cout << "YES" << endl;
  } else {
    cout << "NO" << endl;
  }
}

int main() {
  int t;
  cin >> t;
  while (t--) {
    solve();
  }
}

标签:字符,奇数,int,CodeForces,1883B,++,num,Chemistry,回文
From: https://www.cnblogs.com/againss/p/18326277

相关文章

  • 题解:Codeforces Round 961 (Div. 2) C
    C.Squaringtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputikrpprppfoundanarray\(a\)consistingofintegers.Helikesjustice,sohewantstomake\(a\)fair —thatis,makeitnon......
  • Codeforces Round 958 (Div. 2)
    A.*900水。B.*900发现可以用操作把一串0缩成一个0,1同理。都缩完之后会变成一个01交替的串。比较0和1的个数即可。C.*1300,贪心猜结论。记\(n\)的二进制下有\(x\)个1,\(k\)即为\(x+1\),可以证明这是最长的。从小到大把每一位1去掉后输出剩下的数即可......
  • CodeForces - 1842H
    *3000,大牛题。分析题目的转化首先题目中\(x_i+x_j\le1\)和\(x_i+x_j\ge1\)不好处理,我们不妨将\(x_i\)都减去\(0.5\),结果不变,那么原题则转化成了\(x_i+x_j\leor\ge0\),发现现在只在乎\(x_i\)之间的绝对值大小关系与正负,这样就可以求出总方案数和合法的方案数,所以......
  • 题解:Codeforces Round 961 (Div. 2) B1&B2
    本题含有B1和B2两个难度版本。由于关系相近,我把他们放在同一篇博客中,可自行选择观看B1.Bouquet(EasyVersion)timelimitpertest:1.5secondsmemorylimitpertest:512megabytesinput:standardinputoutput:standardoutputThisistheeasyversionoftheprobl......
  • Codeforces 929 div3 D
    题目:D.TurtleTenacity:ContinualMods题目链接:https://codeforces.com/contest/1933/problem/D算法:数论、贪心。一开始没思路,后面看了别人的题解才搞懂的。思路:1.将原数组a从大到小排序后可以得到的数组b有两种情况。一种是b0!=b1,另一种则是b0=b1(下标从0开始)。对于第一......
  • 题解:Codeforces Round 961 (Div. 2) A
    A.Diagonals*timelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputVitaly503isgivenacheckeredboardwithasideof\(n\)and\(k\)chips.Herealizedthatallthese\(k\)chipsneedto......
  • Codeforces Round 961 (Div. 2)
    ABC没什么,除了B2还没补。主要就是这个D题。这题我基本上需要想到的都想到了,没想到的部分就是记录不合法答案而非直接记录正确答案。其实这思路也有点能够被启发的地方,就是只有某个位置前k个位置是又至少一个数字存在与我们的选择集合里的,我们才能够统计答案。也就是说,如果统计......
  • Codeforces Round 961 (Div. 2)
    A.Diagonals----------------------------题解----------------------------------注意读题,题目中只有i+j相同的格子才是一个对角线,也就是说,(1,1)(2,2)(3,3)的那条大斜线不是个对角线,如图所示这是一个3*3的图中所有的对角线,那么我们只需要如图所示,从中间往两边依次放就可以,......
  • codeforces div_2 961 题解报告
    codeforcesdiv_2961题解报告比赛链接:https://codeforces.com/contest/1995A.Diagonals题目翻译给定一个边长为\(n\)的正方形,给定\(k\),要往正方形选\(k\)个点,\(x+y\)相同的点构成对角线,问至少要几条对角线才能装下\(k\)个点。时限1s,空间限制256MB\(1\len\le100,0\l......
  • Codeforces Round 961 (Div. 2)
    A.JoeyTakesMoney--------------------------题解------------------------------------选取x和y替换掉a[i],a[j],前提是两者乘积相同,最后要求和数组最大,其实很简单,我们只需要不对另x=1y=a[j]*a[x]就行,从左到右遍历整个数组队a[i]和a[i+1]进行此操作,就可以得到我们想要的值......