当前位置: 首页 > news >正文

算法沉淀第四天(Winner)

目录

引言:

Winner

        题意分析

        逻辑梳理

        代码实现

结语:


引言:

        今天是算法沉淀的第四天,昨天我们沉淀了基础的位运算方面的题目,今天我们来沉淀CF的题,感觉分数限定完如果从后往前刷,每次都会有新题又出现在前面,看着不舒服,所以我决定从最早的题开始刷起,如图

        我从最早的题开始刷起,这样就不会又跳出新题影响观感了,桀桀桀

        那么,我们今天来讲一道CF评级为1500的题,就是上图AC的那题,话不多说,我们就进入今天的算法讲解———————>

                  


Winner

        按照惯例,我们先来看题目

        题意分析

        题目链接在这Problem - 2A - Codeforces

        不想跳转的可看下图

       

        这一题的题目很简单,就是给你n轮比拼,每轮都会告诉你一个人的分数变化了多少(其余人分数不变),然后n轮全部结束后,问最终的获胜者是谁,输出获胜者的名字就可以啦

        分数最高的获胜,这毋庸置疑,但是如果最后有多个人分数一样高,那么就要看这些人里哪个人是最先达到这个分数的,然后输出那个人的名字(这是最阴的)

        那么,题目的意思和要求就分析完啦,接下来就进入逻辑梳理环节


        逻辑梳理

        这题如果去掉多人分数相同时那个获胜者的评判条件的话就会很简单,但是,这条件加上就会很阴了,需要多好多的代码来实现这个需求

        因为数据范围十分的小(只有1e3),所以我们可以尝试用暴力的方式来解决这个问题

        首先我们要先解决怎么处理这些人的数据的存储和展示

        这个其实很简单,只要用vector数组开一个string的数据类型就可以了,用这个数组来存每个 名字,然后再开一个vector数组装int数据,用来存对应名字的分数

        然后怎么对这俩个vector数组进行操作呢,很简单,每轮时候都先寻找一下装string的那个vector数组中有没有这个名字,如果没有就用将这个名字新加入数组中,然后再将他的分数加入数组中,因为这俩个信息都是同时开新位置的,所以这俩个数组的长度是一样的

        这时候,又有问题了,那就是因为有俩种情况,直接循环找最大值肯定不现实

        所以,我们可以用一个结构体数组来存相关数据(一个是名字对于数组的下标,还有一个是是这个名字对应的分数),然后每次循环的时候对这个结构体进行结构体排序(通过分数来进行排序 ,由大到小)

        然后将排序完得到的第一个结构体元素和位置再传到新的结构体数组里,来表示进行不同轮数的时候的胜者是谁,并且胜者的分数是几分,这个对于遇到结束后有多个不同分数的情况下有用

        接下来,前面的操作都铺垫完了,最后就是找胜者的过程了

        首先判断是不是最大值只有一个

        如果只有一个,直接输出最大的值对应的人名就可以了

        如果有多个,那么就从第一轮开始循环,判断每一轮都第一的分数有没有到达最后的胜者分,如果到达了,就判断这个人是不是胜者名单里的人,如果是,那就输出这个人,结束循环就好了

        那么,这道题的逻辑梳理就梳理完啦,接下来,我们就进入代码实现的环节


        代码实现

        那么,逻辑梳理已经把流程全说完啦,就直接给AC源码啦

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;int n;struct node
{int wei;int weigh;
}T[1010];struct Node
{int We;string A;int Weight;
}ans[1010];bool cmp(node xx, node yy)
{return xx.weigh > yy.weigh;
}int main()
{cin >> n;vector<string> a;vector<int>q;string b;int t;string d;for(int k = 1;k<=n;k++){int Wei = 0;int xixi = 1;cin >> b >> t;for (int i = 0; i < a.size(); i++){if (a[i].size() == b.size()){int xi = 1;for (int j = 0; j < b.size(); j++){if (a[i][j] != b[j]){xi = 0;break;}}if (xi){Wei = i;xixi = 0;q[i] += t;}}}if (xixi){a.push_back(b);q.push_back(t);Wei = q.size() - 1;T[Wei].wei = Wei;}for (int i = 0; i < a.size(); i++){if (Wei == T[i].wei)T[i].weigh = q[Wei];}sort(T, T + q.size(), cmp);d = a[T[0].wei];ans[k].A = d;ans[k].Weight = T[0].weigh;ans[k].We = T[0].wei;}if (T[0].weigh == T[1].weigh){for (int k = 1; k <= n; k++){if (ans[k].Weight >= T[0].weigh && T[0].weigh == q[ans[k].We]){cout << ans[k].A << endl;return 0;}}}elsecout << d << endl;return 0;
}

        那么 ,这题就讲解完啦


结语:

        今日算法讲解到此结束啦,希望对你们有所帮助,谢谢观看,如果觉得不错可以分享给朋友哟。有什么看不懂的可以评论问哦,

http://www.dtcms.com/a/490399.html

相关文章:

  • 西藏地图飞线html
  • 网站建设与管理课程代码做徽章标牌的企业网站
  • selenium实现自动化脚本的常用函数
  • 大语言模型,一个巨大的矩阵
  • 衡阳营养师报考网站大宗贸易交易平台
  • Azure API Management 负载均衡与故障转移策略完整指南
  • TI CCS软件安装
  • 内存映射文件
  • 网站开发开发语言企业网站做seo的优势
  • 资料片:R语言中常见的英文术语及其含义
  • 企业出海的挑战与应对方案
  • 架构术语:什么是东西流量和南北流量
  • 电子电器架构——车载网关转发buffer心得汇总
  • (Python)终端着色进阶:256色基础及色码效果展示
  • 《R for Data Science (2e)》免费中文翻译 (第10章) --- Exploratory data
  • 简述对网站进行评析的几个方面.wordpress 内涵
  • Python自动化从入门到实战(23):Python打地鼠游戏开发
  • (论文速读)ECLIPSE:突破性的轻量级文本到图像生成技术
  • dede 网站入侵新媒体h5是什么
  • 嵌入式系统守护者:复位IC详解与选型指南
  • 实战指南:用Cliproxy实现Reddit多账号安全运营的完整方案
  • Ovi-音视频生成模型
  • MySQL实战篇09:MySQL主从延迟压测-------每秒1000条写入,延迟1秒
  • 免费自助建站系统上海软件开发工资一般多少
  • 淘客网站做百度推广教育门户网站模板
  • 微信社群管理开发
  • 可再生能源电解水制氢电源并联方案研究
  • AI产业技术突破、生态重构与场景深耕
  • Redis基础指令全解析:从入门到精通
  • 将word和excel快速转换为markdown格式