首页 > 其他 > 详细

CF1397A Juggling Letters

时间:2020-08-31 09:30:52      阅读:84      评论:0      收藏:0      [点我收藏+]

思路

题意:有 \(n\) 个字符串 \(s_1,s_2,...,s_n\),你可以进行任意次操作,每次操作可以将 \(s_i\) 中的任何一个字符删除,并将这个字符插入到 \(s_j\) 的某一个位置上(\(l\le i, j\le n\)\(i\) 可以等于 \(j\)),问经过任意次操作后能不能得到 \(n\) 个相同的字符串

题意很明确,其实我们就是要判断每个字符的出现次数是不是 \(n\) 的倍数,如果某个字符的出现次数 \(cnt\)\(n\) 的倍数,那么显然可以在每个字符串的相同位置中中令这个字符出现 \(\frac{cnt}{n}\) 次,否则就不能得到 \(n\) 个相同的字符串,因此直接记录每一位的出现次数,判断是不是 \(n\) 的倍数即可。

代码

#include <bits/stdc++.h>
using namespace std;
 
const int A = 1e5 + 11;
const int B = 1e6 + 11;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
 
inline int read() {
  char c = getchar();
  int x = 0, f = 1;
  for ( ; !isdigit(c); c = getchar()) if (c == ‘-‘) f = -1;
  for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
  return x * f;
}
 
int a[A];
char s[A];
 
inline void solve() {
  int n = read();
  memset(a, 0, sizeof(a));
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
    int len = strlen(s + 1);
    for (int i = 1; i <= len; i++) {
      a[s[i] - ‘a‘ + 1]++;
    }
  }
  for (int i = 1; i <= 26; i++) {
    if (a[i] % n) {
      puts("NO");
      return;
    } 
  }
  puts("YES");
}
 
int main() {
  int T = read();
  while (T--) solve();
} 

CF1397A Juggling Letters

原文:https://www.cnblogs.com/loceaner/p/CF1397A.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!