| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 牛客(NC)广西大学第四届程序设计竞赛(同步赛)部分题解 -> 正文阅读 |
|
[数据结构与算法]牛客(NC)广西大学第四届程序设计竞赛(同步赛)部分题解 |
赛题链接:牛客(NC)广西大学第四届程序设计竞赛(同步赛) 点击传送 借鉴了mrgg等诸位大佬的代码 第一次写题解,希望大佬勿喷,时间有限,错误难以避免,希望各位大佬指正 A题 Antinomy与比赛的含金量(签到题)?签到题,给n个比赛,每个比赛有三个参数a,b,c如果a,b大于90,c大于60,输出A+,否则输出E+。
B题 Antinomy与取模(数论)? 数论入门题 两个知识点:GCD(最大公约数)、LCM(最小公倍数) 1.最大公约数GCD 整数a和b的最大公约数记为gcd(a,b)。在编程时有两种做法 (1)经典的欧几里得算法,用辗转相除法求最大公约数,模板如下: int gcd(int a,int b){ return b==0? a:gcd(a%b); } 时间复杂度差不多是O(log2n)的,非常快。 (2)或者直接用c++的内置函数求GCD 包含在头文件algorithm下 std::__gcd(a,b) 2.最小公倍数LCM 整数a和b的最小公倍数记为lcm(a,b),模板如下: Int lcm(int a,int b){ Return a/gcd(a,b)*b; } 由题意可知yi是a和b的最小公倍数的整数倍。且yi介于l和r之间。所以我可以先求得a,b的最小公倍数,记为c。由于l<=yi<=r,所以我们可以推得 l/c<=yi/c<=r/c(c=0的情况也满足) 所以让倍数i从l/c遍历到r/c,一旦i*c介于l和r之间,即可输出并跳出循环。如果遍历完还没有输出即不存在答案,输出-1。
C题 Antinomy与清理魔法(排序题)sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。 由于对选择的下标没有要求,为了便于筛选,我们可以通过排序获得一个升序的整齐序列。(这样可以使得任意两个数值相近的数在空间上靠在一起)我们利用贪心的思想,遍历数组,如果前一个数减去后一个数的差值大于k,那么,输出NO并跳出循环,最后如果都满足便输出YES。 ?
D题 Antinomy学内存对齐? ? 根据内存对齐的部分规则以及备注可知,默认的对齐数是4,也就是说int、long、float这些4字节和double、long long、long double这些8字节的成员可以留在最后输出(因为它们的字节数都是4的倍数)。所以只需要考虑char、bool、short这三个成员的顺序情况 即优先级:char>bool>short 如代码所示,结构体node类型数组s[maxn]中每个元素都存储一个字符串string pa和一个优先级p。每次输入一行字符串,通过判断这行字符串的首字母’c’?‘b’?‘s’来对这行字符串赋予优先级:即’c’为首的字符串优先级为1,最高,依次类推。 贴个代码:
E题 Antinomy慢慢点技能树(01背包)? 仔细读题,每个技能最多只能点一次,也就是点或者不点两种情况。可以对应到01背包问题上来
对于每一个精确到小数点后4位的浮点数,由于不能按int类型直接处理,我们可以将它扩大1w倍,这样它就可以被当作int类型来处理了 But 很多同学发现,为什么扩大1w倍后仍然不能ac呢?这里涉及到一个小小的知识点,也就是说会出现下面这种情况:
? 也就是说我们如果想要使得答案准确,需要给原来的数上加上一点数,使得它可以进位,从而不会发生如上图所示的情况。 解决这些问题后,答案就显然易见了:
F题 Antinomy与金手指(kmp解法)仔细读题,本题可以这样理解: 第一次输入一个字符串str 第二次输入一个字符串pattern 当时做题时,我想到了一个经典问题:石子合并问题 其中处理一段循环石子堆时,它使用了将石子堆重复两遍的方法来进行合并 所以利用这种思想,我们来处理这道题: 如str=abcde pattern=cdeab的情况时,我们可以修改str=abcdeabcde,然后判断str是否存在一段pattern序列,如果存在即满足条件。 当然可以选择暴力搜索,就是算法复杂度会很大(因为n<=2e6) 这里我选择使用kmp算法,当然大佬可以考虑更优的算法AC自动机、后缀树等,这里不做过多讲解。
贴个代码:
?以上就是我对这次比赛部门题目的理解。由于太菜了,只能解释这点题目。不正确的地方希望有大佬能帮忙指正,拜托了拜托了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 16:54:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |