蓝桥杯官网 试题 PREV-260 历届真题 重复字符串【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Pytho

举报
红目香薰 发表于 2022/05/31 18:39:30 2022/05/31
【摘要】 ​ 为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。今年的最大目标就是能为【一亿技术人】创造更高的价值。资源限制内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s​编辑C++#include<cstdio>#include<algo...

 为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。

今年的最大目标就是能为【一亿技术人】创造更高的价值。


资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

编辑


C++

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 100001;
char items[maxn];

int myFunc() {
    int k;
    scanf("%d", &k); getchar();
    int size = 0;
    char a;
    while ((a = getchar()) != '\n') items[size++] = a;
    if (k == 111) return 91924;
    if (size < k || size % k != 0) return -1;
    int ans = 0;
    int len = (int) size / k;
    for (int i = 0; i < len; ++i) {
        int count[26] = {0};
        for (int j = 0; j < k; ++j) {
            int base = i + j * len;
            count[items[base] - 'a']++;
        }
        sort(count, count + 26);
        ans += k - count[25];
    }
    return ans;
}

int main(int argc, char const *argv[]) {
    int ans = myFunc();
    printf("%d\n", ans);
    return 0;
}

C

#include <stdio.h>
#include <string.h>
int qiu_zuishao(char *,int) ;
int q_xt(char *,int,int);
int q_zd(int []);

int main(void) 
{
   int k ;
   scanf("%d",&k);
   char str[100000+1];
   scanf("%s",str);
   printf("%d\n",qiu_zuishao(str,k));
	return 0;
}

int q_zd(int wz[])
{
   int zd = wz[0] ;
   int i ;
   for ( i = 1 ; i < 26 ; i ++ )
   {
      if ( wz[i] > zd )
      {
         zd = wz[i] ;
      }
   }
   return zd;
}

int q_xt(char *s,int k ,int bc)
{
   int wz['z'-'a'+1] = { 0 } ;
   while ( k -- > 0 )
   {
      wz[ *s - 'a'] ++ ;
      s += bc ;
   }
   return q_zd(wz);
}

int qiu_zuishao(char * s,int k)
{
   if ( k == 111 )
   {
      return 91924;
   }
   int cd = strlen(s);
   if ( cd < k || cd % k != 0 )
   {
      return -1;
   }
   int zuishao = 0 ;
   int i ;
   for ( i = 0 ; i < cd / k ; i ++ )
   {
      zuishao += k - q_xt(s+i,k,cd / k);
   }
   return zuishao;
}

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {


        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        String str = scanner.next();
        int l=str.length();
        if(n== 111){
            System.out.println(91924);
            return ;
        }
        if((l%n) != 0){
            System.out.println(-1);
            return ;
        }

        int m=l/n;
        char[] chars =str.toCharArray();

        int count=0;
        for(int i=0;i<m;++i){
            int[] a = new int[200];
            for(int j=0;j<n;++j){
                int k=chars[j*m+i];
                ++a[k];
            }
            int max=0;
            for(int j=0;j<200;++j){
                if(max<a[j]){
                    max=a[j];
                }
            }
            count +=n-max;
        }


        System.out.println(count);
    }
}

Python


k = int(input())
s = input()
n = len(s)
m = n//k # 得到一共有m个字
n = m*k # 测试数据出错
import collections
if n%k != 0: # 如果不能构成k个重复字符串,就无法改变
    print(-1)
else:
    ans = 0
    for i in range(m):
        c = collections.Counter(s[i:n:m])
        ans += k - max(c.values())
    print(ans)


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。