华为OD机试双机位C卷 - 明日之星选举 (JAVA Python C/ C++ JS GO)

明日之星选举

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型

华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解

题目描述

给定一组选票votes[],vote[i]代表第i张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan称为明日之星,返回hanmei称为明日之星。赞成或返回使用逗号(,)分割。

给定一个数组n,表示最后将筛选成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

注意:

  • 1 <= votes.length <= 500

  • 1 <= votes[i].length <= 20

  • vote[i]由小写字母和逗号组成,且最多只有一个逗号。

  • vote[i]中赞成票必选,反对票可选。

  • n的取值范围为[1, 不同姓名的数量]

输入描述

第一行输入为M,表示选票的数量,其中1 <= M <= 500

接下来M行为选票具体内容

最后一行输入为N,表示最终当选明日之星的人员个数1 <= N <= 不同姓名的数量

输出描述

输出一个字符串,返回当选的N个人的姓名,顺序排列,逗号分割。

用例1

输入

6 zhangsan,hanmei zhangsan,lisi lisi lisi wangwu hanmei 2

输出

zhangsan,lisi

示例二

输入

4 zhangsan,lisi lisi,wangwu wangwu,qianliu qianliu,zhangsan 2

输出

lisi,qianliu

说明

zhangsan:1赞成,1反对 lisi:1赞成,1反对 wangwu:1赞成,1反对 qianliu:1赞成,1反对 票数情况相同,按照字典序升序,返回lisi,qianliu

题解

思路:逻辑分析 + 在自定义排序

  1. 自定义结构体或者类存储所有出现人的选票情况,对于python和C++等语言统计选票可以使用哈希表进行处理,C语言通过线性扫描也是可以的。
  2. 将所有人的选票情况使用一个类/结构体数组存储,然后按照题目要求进行排序即可。
  3. 按照题目要求规则输出前n个人的名字。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> #include<set> using namespace std; struct Person{ string name; int agreeCount; int disagreeCount; Person(){} Person(string name, int agreeCount, int disagreeCount): name(name), agreeCount(agreeCount), disagreeCount(disagreeCount){} }; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<string> split(const string& str, const string& delimiter) { vector<string> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(str.substr(start, end - start)); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(str.substr(start)); return result; } int main() { int m; cin >> m; // 存储每个人同意票数/不同票数 map<string,int> personAgreeNum; map<string,int> personDisagreeNum; // 所有出现的名字 set<string> allName; for (int i = 0; i < m; i++) { string vote; cin >> vote; vector<string> voteName = split(vote, ","); personAgreeNum[voteName[0]]++; allName.insert(voteName[0]); // 可选 if (voteName.size() == 2) { personDisagreeNum[voteName[1]]++; allName.insert(voteName[1]); } } int n; cin >> n; vector<Person> allPeopleScore; for (auto& name : allName) { allPeopleScore.push_back({name, personAgreeNum[name], personDisagreeNum[name]}); } // 自定义排序 sort(allPeopleScore.begin(), allPeopleScore.end(), [](Person &a, Person &b) { if (a.agreeCount == b.agreeCount) { if (a.disagreeCount == b.disagreeCount) { return a.name < b.name; } return a.disagreeCount < b.disagreeCount; } return a.agreeCount > b.agreeCount; }); // 输出结果 for (int i = 0; i < n; i++) { if (i != 0) { cout << ","; } cout << allPeopleScore[i].name; } return 0; }

C语言

#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAXN1000#defineNAMELEN25typedefstruct{charname[NAMELEN];intagree;intdisagree;}Person;Person people[MAXN];intcnt=0;// 查找人名,存在返回下标,不存在返回 -1intfind(char*name){for(inti=0;i<cnt;i++){if(strcmp(people[i].name,name)==0){returni;}}return-1;}// 排序规则intcmp(constvoid*a,constvoid*b){Person*x=(Person*)a;Person*y=(Person*)b;if(x->agree!=y->agree)returny->agree-x->agree;// 同意票多的优先if(x->disagree!=y->disagree)returnx->disagree-y->disagree;// 反对票少的优先returnstrcmp(x->name,y->name);// 名字字典序}intmain(){intm;scanf("%d",&m);for(inti=0;i<m;i++){chars[2*NAMELEN];scanf("%s",s);char*p=strchr(s,',');if(p){*p='\0';char*a=s;char*b=p+1;intia=find(a);if(ia==-1){strcpy(people[cnt].name,a);people[cnt].agree=1;people[cnt].disagree=0;cnt++;}else{people[ia].agree++;}intib=find(b);if(ib==-1){strcpy(people[cnt].name,b);people[cnt].agree=0;people[cnt].disagree=1;cnt++;}else{people[ib].disagree++;}}else{intidx=find(s);if(idx==-1){strcpy(people[cnt].name,s);people[cnt].agree=1;people[cnt].disagree=0;cnt++;}else{people[idx].agree++;}}}intn;scanf("%d",&n);// 自定义排序qsort(people,cnt,sizeof(Person),cmp);for(inti=0;i<n;i++){if(i)printf(",");printf("%s",people[i].name);}return0;}

JAVA

import java.io.*; import java.util.*; public class Main { static class Person { String name; int agreeCount; int disagreeCount; Person(String name, int agreeCount, int disagreeCount) { this.name = name; this.agreeCount = agreeCount; this.disagreeCount = disagreeCount; } } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int m = Integer.parseInt(br.readLine()); // 存储每个人同意票数 / 不同意票数 Map<String, Integer> agreeMap = new HashMap<>(); Map<String, Integer> disagreeMap = new HashMap<>(); // 所有出现的名字 Set<String> allName = new HashSet<>(); for (int i = 0; i < m; i++) { String vote = br.readLine(); String[] arr = vote.split(","); agreeMap.put(arr[0], agreeMap.getOrDefault(arr[0], 0) + 1); allName.add(arr[0]); // 返回票可选 if (arr.length == 2) { disagreeMap.put(arr[1], disagreeMap.getOrDefault(arr[1], 0) + 1); allName.add(arr[1]); } } int n = Integer.parseInt(br.readLine()); List<Person> list = new ArrayList<>(); // 统一用数组存储 for (String name : allName) { list.add(new Person( name, agreeMap.getOrDefault(name, 0), disagreeMap.getOrDefault(name, 0) )); } // 自定义排序 list.sort((a, b) -> { if (a.agreeCount != b.agreeCount) return b.agreeCount - a.agreeCount; if (a.disagreeCount != b.disagreeCount) return a.disagreeCount - b.disagreeCount; return a.name.compareTo(b.name); }); // 构建结果 StringBuilder sb = new StringBuilder(); for (int i = 0; i < n; i++) { if (i > 0) sb.append(","); sb.append(list.get(i).name); } System.out.println(sb.toString()); } }

Python

importsysdefmain():input=sys.stdin.readline m=int(input())# 存储每个人同意票数 / 不同意票数agree={}disagree={}# 所有出现的名字all_name=set()for_inrange(m):vote=input().strip()arr=vote.split(",")agree[arr[0]]=agree.get(arr[0],0)+1all_name.add(arr[0])iflen(arr)==2:disagree[arr[1]]=disagree.get(arr[1],0)+1all_name.add(arr[1])n=int(input())people=[]fornameinall_name:people.append((-agree.get(name,0),# 取负数用于降序disagree.get(name,0),name))# 排序规则:同意票降序,不同意票升序,名字字典序people.sort()result=[people[i][2]foriinrange(n)]print(",".join(result))if__name__=="__main__":main()

JavaScript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letlines=[];rl.on('line',(line)=>{lines.push(line.trim());});rl.on('close',()=>{letidx=0;constm=parseInt(lines[idx++],10);// 存储每个人同意票数 / 不同意票数constagree=newMap();constdisagree=newMap();constallName=newSet();for(leti=0;i<m;i++){constvote=lines[idx++];constarr=vote.split(',');agree.set(arr[0],(agree.get(arr[0])||0)+1);allName.add(arr[0]);// 可选的反对票if(arr.length===2){disagree.set(arr[1],(disagree.get(arr[1])||0)+1);allName.add(arr[1]);}}constn=parseInt(lines[idx++],10);// 构造人员信息列表letpeople=[];for(letnameofallName){people.push({name:name,agreeCount:agree.get(name)||0,disagreeCount:disagree.get(name)||0});}// 自定义排序:// 1. 同意票多的在前// 2. 不同意票少的在前// 3. 名字字典序people.sort((a,b)=>{if(a.agreeCount!==b.agreeCount){returnb.agreeCount-a.agreeCount;}if(a.disagreeCount!==b.disagreeCount){returna.disagreeCount-b.disagreeCount;}returna.name.localeCompare(b.name);});// 输出前 n 个名字letresult=[];for(leti=0;i<n;i++){result.push(people[i].name);}console.log(result.join(','));});

Go

packagemainimport("bufio""fmt""os""sort""strings")typePersonstruct{namestringagreeCountintdisagreeCountint}funcmain(){in:=bufio.NewReader(os.Stdin)varmintfmt.Fscan(in,&m)// 存储每个人同意票数 / 不同意票数agree:=make(map[string]int)disagree:=make(map[string]int)// 所有出现的名字allName:=make(map[string]bool)fori:=0;i<m;i++{varvotestringfmt.Fscan(in,&vote)arr:=strings.Split(vote,",")agree[arr[0]]++allName[arr[0]]=true// 返回掉可选iflen(arr)==2{disagree[arr[1]]++allName[arr[1]]=true}}varnintfmt.Fscan(in,&n)people:=make([]Person,0)forname:=rangeallName{people=append(people,Person{name:name,agreeCount:agree[name],disagreeCount:disagree[name],})}// 自定义排序sort.Slice(people,func(i,jint)bool{ifpeople[i].agreeCount!=people[j].agreeCount{returnpeople[i].agreeCount>people[j].agreeCount}ifpeople[i].disagreeCount!=people[j].disagreeCount{returnpeople[i].disagreeCount<people[j].disagreeCount}returnpeople[i].name<people[j].name})// 输出结果fori:=0;i<n;i++{ifi>0{fmt.Print(",")}fmt.Print(people[i].name)}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1170452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen3-VL-2B创新实践:AR场景中的实时视觉理解

Qwen3-VL-2B创新实践&#xff1a;AR场景中的实时视觉理解 1. 引言&#xff1a;视觉语言模型在增强现实中的新可能 随着增强现实&#xff08;AR&#xff09;技术的快速发展&#xff0c;用户对智能交互的需求日益增长。传统AR系统多依赖预设逻辑和标记识别&#xff0c;缺乏对真…

BGE-M3多模态探索:图文匹配云端实验,3块钱搞定

BGE-M3多模态探索&#xff1a;图文匹配云端实验&#xff0c;3块钱搞定 你是不是也遇到过这样的情况&#xff1a;手头有个跨模态研究的点子&#xff0c;想验证一下BGE-M3在图文匹配上的表现&#xff0c;但实验室GPU排队长达一周起步&#xff1f;自己买显卡成本太高&#xff0c;…

AWPortrait-Z极简部署:预配置镜像使用教程

AWPortrait-Z极简部署&#xff1a;预配置镜像使用教程 你是否也遇到过这样的场景&#xff1a;客户临时要求演示AI人像美化效果&#xff0c;但你手头既没有现成环境&#xff0c;又不想花几个小时折腾依赖、下载模型、调试参数&#xff1f;作为一名IT顾问&#xff0c;我太懂这种…

美团秋招笔试真题 - 放它一马 信号模拟

放他一马 题目描述 小美会按照编号从小到大的顺序依次遇到 n 只怪物&#xff08;编号为 1 ~ n&#xff09;&#xff0c;怪物 i(1 ≤ i ≤ n) 的生命为 ai。对于每只怪物&#xff0c;小美都可以选择放走 Ta 或者击败 Ta。如果放走怪物&#xff0c;小美将获得 i 点经验值。如果击…

ms-swift新手村:第一课教你跑通Hello World

ms-swift新手村&#xff1a;第一课教你跑通Hello World 1. 引言 1.1 学习目标 本文旨在为刚接触 ms-swift 框架的新手提供一份从零开始的入门指南&#xff0c;帮助你快速完成第一个“Hello World”级别的模型推理任务。通过本教程&#xff0c;你将掌握&#xff1a; 如何安装…

【Week4_Day22】【软件测试学习记录与反思】【头条项目测试点设计思路、用例编写等实践(登录功能、发布文章功能), 收集问题, 反思改进,写博客】

【Week4_Day22】【软件测试学习记录与反思】【头条项目测试点设计思路、用例编写等实践(登录功能、发布文章功能), 收集问题, 反思改进,写博客】今日计划:复习知识,记录笔记,整理思维导图, 收集问题, 反思改进,…

电商商品信息提取:cv_resnet18_ocr-detection实战应用

电商商品信息提取&#xff1a;cv_resnet18_ocr-detection实战应用 1. 引言 1.1 业务场景描述 在电商平台的日常运营中&#xff0c;大量非结构化图像数据包含关键的商品信息&#xff0c;如品牌名称、型号参数、价格标签和促销文案。传统人工录入方式效率低、成本高且易出错。…

BERT智能填空服务应用案例:教育领域自动补全系统搭建

BERT智能填空服务应用案例&#xff1a;教育领域自动补全系统搭建 1. 引言 随着自然语言处理技术的不断演进&#xff0c;预训练语言模型在语义理解任务中展现出强大的能力。其中&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xf…

小白也能懂:三步搭建AI智能翻译服务的终极教程

小白也能懂&#xff1a;三步搭建AI智能翻译服务的终极教程 你是不是也遇到过这样的情况&#xff1a;手头有一份英文产品文档、用户反馈或市场报告&#xff0c;想快速了解内容&#xff0c;但又不想一句句复制粘贴去查翻译&#xff1f;作为一名非技术背景的产品经理&#xff0c;…

本地GPU不够用?BGE-M3云端部署3步搞定

本地GPU不够用&#xff1f;BGE-M3云端部署3步搞定 你是不是也遇到过这种情况&#xff1a;作为博士生&#xff0c;正在做跨语言信息检索的研究&#xff0c;手头的实验数据越来越多&#xff0c;模型越来越复杂&#xff0c;可实验室的GPU总是被占满&#xff0c;而自己的笔记本显卡…

会议记录神器:用Fun-ASR-MLT-Nano-2512实现语音转文字

会议记录神器&#xff1a;用Fun-ASR-MLT-Nano-2512实现语音转文字 在企业会议录音堆积如山、客服录音依赖人工转写的今天&#xff0c;如何高效、安全地将语音内容转化为可编辑的文字&#xff1f;当一段录音涉及客户隐私或商业机密时&#xff0c;是否还能放心使用公有云API&…

IQuest-Coder-V1如何实现128K支持?原生上下文部署技术揭秘

IQuest-Coder-V1如何实现128K支持&#xff1f;原生上下文部署技术揭秘 1. 引言&#xff1a;面向软件工程的下一代代码大模型 IQuest-Coder-V1-40B-Instruct 是一款专为软件工程与竞技编程场景设计的新一代代码大语言模型。该系列模型旨在推动自主软件工程、智能编码助手和复杂…

Qwen3-32B智能写作实测:云端1小时生成5万字,成本2元

Qwen3-32B智能写作实测&#xff1a;云端1小时生成5万字&#xff0c;成本2元 你是不是也是一位网文作者&#xff1f;每天面对更新压力&#xff0c;卡文、断更、灵感枯竭成了常态。最近几年AI写作火了&#xff0c;你也听说“大模型能自动写小说”&#xff0c;于是兴致勃勃地下载…

教学实践:使用预配置镜像在课堂上快速演示DamoFD模型

教学实践&#xff1a;使用预配置镜像在课堂上快速演示DamoFD模型 在高校计算机视觉课程中&#xff0c;人脸检测是一个基础而关键的技术模块。它不仅是后续人脸识别、表情分析、图像编辑等任务的前置步骤&#xff0c;更是学生理解目标检测思想的重要切入点。然而&#xff0c;很…

社交网络知识图谱构建:NLP+图数据库实践

好的&#xff0c;各位朋友&#xff01;今天&#xff0c;我们将一起攀登一座名为“社交网络知识图谱”的技术山峰。这趟旅程&#xff0c;我们将融合自然语言处理&#xff08;NLP&#xff09;的深邃智慧与图数据库&#xff08;Graph Database&#xff09;的灵动结构&#xff0c;最…

毫秒级多任务场景:多进程的局限性与多线程“消耗>收益”的深度剖析

在并发编程领域&#xff0c;多进程与多线程是实现任务并行的两大核心手段。开发者常陷入“并行即提速”的认知误区&#xff0c;尤其在ms&#xff08;毫秒&#xff09;级短任务场景中&#xff0c;盲目使用多进程或多线程&#xff0c;不仅无法获得预期性能提升&#xff0c;反而会…

SFT/DPO/PPO/GRPO/RLHF 等对齐方法总结-初版

引言 文中的公式比较粗糙&#xff0c;建议看原版公式&#xff0c;此处公式仅作为个人理解使用的简化版 1 SFT&#xff08;Supervised Fine - Tuning&#xff0c;监督微调&#xff09; SFT 是在预训练大模型基础上&#xff0c;用高质量标注的输入 - 输出对数据进一步训练模型&…

BGE-Reranker-v2-m3性能优化:批处理技巧

BGE-Reranker-v2-m3性能优化&#xff1a;批处理技巧 1. 引言 1.1 业务场景描述 在当前检索增强生成&#xff08;RAG&#xff09;系统中&#xff0c;向量数据库的初步检索虽然高效&#xff0c;但往往返回大量语义相关性较低的候选文档。为提升最终回答的准确性和可靠性&#…

没Python经验能用IndexTTS吗?云端网页版3分钟出成果

没Python经验能用IndexTTS吗&#xff1f;云端网页版3分钟出成果 你是不是也遇到过这种情况&#xff1a;作为一名外语老师&#xff0c;想给学生准备一段地道的英语听力材料&#xff0c;或者生成一段带情绪的对话来提升课堂趣味性&#xff0c;结果一搜发现要用AI语音合成工具——…

# OpenCode + Agent Browser 自动化测试详细教程

OpenCode + Agent Browser 自动化测试详细教程 前言 本教程将手把手教你如何使用 OpenCode 结合 Agent Browser 进行自动化测试。即使你是完全的新手,也能通过本教程快速上手浏览器自动化测试。 一、环境准备 1.1 安装…