XTU OJ 1170 学习笔记

ICPC

题目描述

ACM/ICPC比赛涉及的知识点非常多,一个队伍三个人需要能够互补。一个队伍某个知识点的高度是三个人中水平最高的那个人决定。现在给你三个人的每个知识点的水平情况,请计算一下这个队伍的水平。

输入

存在多个样例。每个样例的第一行是一个整数N(3≤N≤100),表示所有知识点的个数。 以后三行为每个人每个知识点的水平情况。水平用A到E表示,一共5级,A最强,E最弱,依次递减。

输出

每个样例输出两行,第一行为一个字符串,一个队伍的各个知识点的水平情况。第二行是5个整数,表示5个级别知识点的个数,每个整数之间有一个空格。

样例输入
复制代码
3
ABC
BBB
AAE
4
DDBD
DEDC
CDDE
0
样例输出
复制代码
AAB
2 1 0 0 0
CDBC
0 1 2 1 0
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=110;
char s1[N],s2[N],s3[N],m[N],num[10];

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		if(n==0)	break;
		scanf("%s",s1);
		scanf("%s",s2);
		scanf("%s",s3);
		memset(m,0,sizeof m);
		for(int i=0;i<n;i++)
		{
			m[i]=min({s1[i],s2[i],s3[i]});
		}
		for(int i=0;i<n;i++)	printf("%c",m[i]);
		printf("\n");
		memset(num,0,sizeof num);
		for(int i=0;i<n;i++)	num[m[i]-'A']++;
		for(int i=0;i<4;i++)	printf("%d ",num[i]);
		printf("%d\n",num[4]);
	}
	return 0;
}

每一个知识点的水平是由最强的人决定的,这就是所谓的长板效应。靠前的字母表示水平高,我们实际上只需要找到每一个知识点对应的最靠前的字母即可,找到每一列最靠前的字母,就表示找到了最高的水平,然后一次输出代表最高水平的字母即可。

使用一个计数器来存储每一个最高水平字母出现的次数,然后把这个次数依次输出即可

注意一下代码细节,使用min函数寻找最小值,如果要寻找三个元素里面的最小值,可以使用大括号括起来,像这样子

cpp 复制代码
m[i]=min({s1[i],s2[i],s3[i]});

每一次循环都要初始化m数组和计数数组,防止上一次循环的结果对后一次循环造成影响

注意输出的格式要求,有时候最后一个元素后面不能有空格

相关推荐
imuliuliang4 小时前
算法中的随机化思想及其复杂度收益评估的技术7
算法
不能跑的代码不是好代码5 小时前
二叉树从基础概念到LeetCode实战
算法·leetcode
智者知已应修善业5 小时前
【利用proteus设计微型CPU,完成寻址相加数据的过程。】2025-2-26
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
凯瑟琳.奥古斯特5 小时前
二分查找解力扣1011最优运载能力
开发语言·c++·算法·leetcode·职场和发展
学计算机的计算基5 小时前
二叉树算法下篇:递归核心技巧与高频面试题详解
java·笔记·算法
WZF-Sang5 小时前
TCP和UDP协议
linux·服务器·网络·c++·学习·tcp/ip·udp
my_power5205 小时前
大模型概述学习笔记
笔记·学习
心中有国也有家5 小时前
Flutter 鸿蒙编译与构建流程深度解析
学习·flutter·华为·harmonyos
敲不会代码也学不会英语5 小时前
【AI学习之旅02】AI全景图:一张图看懂AI生态——机器学习/深度学习/大模型关系与术语扫盲
人工智能·学习·机器学习
水龙吟啸5 小时前
华为2026.6.24机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·机器学习·华为