【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法

简介: 【c++百日刷题计划】 ———— DAY13,奋战百天,带你熟练掌握基本算法

第一题 宇宙总统


题目描述


地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。


输入格式


第一行为一个整数 n,代表竞选总统的人数。


接下来有 n 行,分别为第一个候选人到第 n 个候选人的票数。


输出格式


共两行,第一行是一个整数 m,为当上总统的人的号数。


第二行是当上总统的人的选票。


样例 #1


样例输入 #1

5
98765
12365
87954
1022356
985678


样例输出 #1

4
1022356


提示


票数可能会很大,可能会到 100 100100 位数字。


1 ≤ n ≤ 20


解题思路


1)数字可以用字符串存储。

2)可以直接比较字符串的位数,记录大的一方。若相等,直接比较大小,记录大的一方。

3)进行输出。


参考代码


#include<bits/stdc++.h>
using namespace std;    
int main()    
{
    string a,b;
    int n;
    int x=1;
    cin>>n;
    cin>>a;
    for(int i=2;i<=n;i++)
    {
        cin>>b;
        if(a.length()<b.length())
        {
            a=b;
            x=i;
        }
        else if(a<b&&a.length()==b.length())
        {
            a=b;
            x=i;
        }
    }
     cout<<x<<endl<<a;
}


第二题 [HAOI2012] 音量调节


题目描述


一个吉他手准备参加一场演出。他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量。在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少。每一次改变音量,他可以选择调高也可以调低。


音量用一个整数描述。输入文件中整数 b e g i n L e v e l ,代表吉他刚开始的音量,整数 maxLevel,代表吉他的最大音量。音量不能小于 0 也不能大于maxLevel。输入中还给定了 n 个整数 c 1 , c 2 , c 3 , ⋯   , c n ,表示在第 i首歌开始之前吉他手想要改变的音量是多少。


吉他手想以最大的音量演奏最后一首歌,你的任务是找到这个最大音量是多少。


输入格式


第一行依次为三个整数 n,beginLevel 和maxLevel。


第二行依次为 n 个整数 c 1 , c 2 , c 3 , ⋯   , c n  。


输出格式


输出演奏最后一首歌的最大音量。如果吉他手无法避免音量低于 0 或者高于maxLevel,输出 -1。


样例 #1


样例输入 #1

3 5 10
5 3 7


样例输出 #1

10


提示


image.png


解题思路


1)01背包问题。

2)背包之后倒序找最大能达到的音量。

2)找到了进行输出。


参考代码


#include<bits/stdc++.h>
using namespace std;
long long dp[10500][10200];
int main()
{
  int n,b,m;
  cin>>n>>b>>m;
  dp[0][b]=1;
  for(int i=1;i<=n;i++)
  {
    int c;
    cin>>c;
    for(int j=m;j>0;j--)
    {
                dp[i][j]=(dp[i][j]||dp[i-1][j+c]||dp[i-1][j-c]);
    }
  }
  for(int j=m;j>0;j--)
  {
    if(dp[n][j]==1)
    {
      cout<<j;
      return 0;
    }
  }
  cout<<-1;
    return 0;
}


第三题 高低位交换


题目描述


给出一个小于image.png的正整数。这个数可以用一个32位的二进制数表示(不足32位用0补足)。我们称这个二进制数的前16 位为“高位”,后16位为“低位”。将它的高低位交换,我们可以得到一个新的数。试问这个新的数是多少(用十进制表示)。


例如,数1314520用二进制表示为00000000000101000000111011011000(添加了11个前导0 补足为32位),其中前16位为高位,即0000000000010100;后16 位为低位,即0000111011011000。将它的高低位进行交换,我们得到了一个新的二进制数00001110110110000000000000010100。它即是十进制的249036820。


输入格式


一个小于image.png 的正整数


输出格式


将新的数输出


样例 #1


样例输入 #1

1314520


样例输出 #1

249036820


解题思路


1)位运算问题,可以看看这个文章了解一下 点这里!!!

2)将原数的后16位前移至新数的前16位。

3)将原数的前16位前移至新数的后16位。


参考代码


#include<iostream>
using namespace std;
int main()
{
    unsigned long long n;
    cin>>n;
    cout<<((n&0x0000ffff)<<16|(n&0xffff0000)>>16);
}


第四题 【深基16.例1】淘汰赛


题目描述


image.png个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?


输入格式


第一行一个整数 n,表示一共image.png个国家参赛。


第二行 image.png个整数,第 i个整数表示编号为 i 的国家的能力值(1 ≤ i ≤ image.png)。


数据保证不存在平局。


输出格式


仅一个整数,表示亚军国家的编号。


样例 #1


样例输入 #1

3
4 2 3 1 10 5 9 7


样例输出 #1

1


解题思路


1)冠亚军应该从左半部分的最强者和右半部分的最强者中产生。

2)找到左半部分的最强者。

3)找到右半部分的最强者。

4)比较,输出答案。


参考代码


#include <bits/stdc++.h>
using namespace std;
struct gj {
    int hm;
    int nl=0;
};
int main() 
{
    int n;
    gj maxl, maxr;
    gj a;
    cin >> n;
    for (int i=0;i<pow(2,n-1);i++) 
    {
        cin >>a.nl;
        if (a.nl>maxl.nl) 
        {
            maxl.nl=a.nl;
            maxl.hm=i+1;
        }
    }
    for (int i=pow(2,n-1);i<pow(2,n);i++) 
    {
        cin>>a.nl;
        if (a.nl>maxr.nl)
        {
            maxr.nl=a.nl;
            maxr.hm=i+1;
        }
    }
    if (maxl.nl>maxr.nl)cout << maxr.hm;
    else cout << maxl.hm;
    return 0;
}

相关文章
|
10月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
267 0
|
11月前
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
325 0
|
12月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
300 17
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
244 2
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
276 4
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
299 8
|
存储 算法 数据处理
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
376 15
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
302 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
676 3