第六周算法题

逆序对

  • 题目描述

猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。

最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中 a i > a j a_i>a_j ai>aj i < j i<j i<j 的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。注意序列中可能有重复数字。

Update:数据已加强。

  • 输入格式

第一行,一个数 n n n,表示序列中有 n n n个数。

第二行 n n n 个数,表示给定的序列。序列中每个数字不超过 1 0 9 10^9 109

  • 输出格式

输出序列中逆序对的数目。

  • 样例 #1

  • 样例输入 #1

6
5 4 2 6 3 1
  • 样例输出 #1
11
  • 提示

对于 25 % 25\% 25% 的数据, n ≤ 2500 n \leq 2500 n2500

对于 50 % 50\% 50% 的数据, n ≤ 4 × 1 0 4 n \leq 4 \times 10^4 n4×104

对于所有数据, n ≤ 5 × 1 0 5 n \leq 5 \times 10^5 n5×105

请使用较快的输入输出

应该不会 O ( n 2 ) O(n^2) O(n2) 过 50 万吧 by chen_zhe

  • 过不掉,呜呜,python只过了百分之五十
def merge_sort(lst):
    cnt = 0
    if len(lst) <= 1:
        return 0

    mid = len(lst) // 2

    l = lst[:mid]
    r = lst[mid:]

    cnt += merge_sort(l) + merge_sort(r)

    i = j = k = 0  # 深拷贝

    while i < len(l) and j < len(r):
        if l[i] <= r[j]:
            lst[k] = l[i]
            i += 1
            k += 1
        else:
            lst[k] = r[j]
            j += 1
            k += 1
            cnt += len(l) - i

    while (i < len(l)):
        lst[k] = l[i]
        i += 1
        k += 1
    while (j < len(r)):
        lst[k] = r[j]
        j += 1
        k += 1

    return cnt


n = int(input())
lst = list(map(int, input().split()))
cnt = merge_sort(lst)
print(cnt)

[NOIP2005 提高组] 谁拿了最多奖学金

  • 题目描述

某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

  1. 院士奖学金,每人 8000 8000 8000 元,期末平均成绩高于 80 80 80 分( > 80 >80 >80),并且在本学期内发表 1 1 1篇或 1 1 1篇以上论文的学生均可获得;
  2. 五四奖学金,每人 4000 4000 4000 元,期末平均成绩高于 85 85 85 分( > 85 >85 >85),并且班级评议成绩高于 80 80 80 分( > 80 >80 >80)的学生均可获得;
  3. 成绩优秀奖,每人 2000 2000 2000 元,期末平均成绩高于 90 90 90 分( > 90 >90 >90)的学生均可获得;
  4. 西部奖学金,每人 1000 1000 1000 元,期末平均成绩高于 85 85 85 分( > 85 >85 >85)的西部省份学生均可获得;
  5. 班级贡献奖,每人 850 850 850 元,班级评议成绩高于 80 80 80 分( > 80 >80 >80)的学生干部均可获得;

只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是 87 87 87 分,班级评议成绩 82 82 82 分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是 4850 4850 4850 元。

现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

  • 输入格式

第一行是 1 1 1个整数 N N N,表示学生的总数。

接下来的 N N N 行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过 20 20 20 的字符串(不含空格);期末平均成绩和班级评议成绩都是 0 0 0 100 100 100 之间的整数(包括 0 0 0 100 100 100);是否是学生干部和是否是西部省份学生分别用 1 1 1 个字符表示, Y \tt Y Y 表示是, N \tt N N 表示不是;发表的论文数是 0 0 0 10 10 10 的整数(包括 0 0 0 10 10 10)。每两个相邻数据项之间用一个空格分隔。

  • 输出格式

3 3 3 行。

  • 1 1 1 行是获得最多奖金的学生的姓名。

  • 2 2 2 行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。

  • 3 3 3 行是这 N N N 个学生获得的奖学金的总数。

  • 样例 #1

  • 样例输入 #1

4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
  • 样例输出 #1
ChenRuiyi
9000
28700
  • 提示

【数据范围】

对于 100 % 100\% 100% 的数据,满足 1 ≤ N ≤ 100 1 \le N \le 100 1N100

【题目来源】

NOIP 2005 提高组第一题

n = int(input())
students = []
total = 0
for i in range(n):
    bonus = 0
    s = input().split()
    if int(s[1]) > 80 and int(s[-1]) >= 1:
        bonus += 8000
    if int(s[1]) > 85 and int(s[2]) > 80:
        bonus += 4000
    if int(s[1]) > 90:
        bonus += 2000
    if int(s[1]) > 85 and s[-2] == 'Y':
        bonus += 1000
    if int(s[2]) > 80 and s[-3] == 'Y':
        bonus += 850

    total += bonus
    s.append(i)  # 记录学生的先后顺序
    s.append(bonus)
    students.append(s)

#  先按奖学金从小到大排序,再按学生先后顺序排序(序号小的排在后面,意味着最后一个获得的奖学金最多且序号最小
students.sort(key=lambda x: (x[-1], -x[-2]))print(students[-1][0])
print(students[-1][-1])
print(total)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
⼈⼯智能:模型与算法——练习 第⼀周 第⼀周 ⼈⼯智能概述 ⼈⼯智能概述 1如果⼀个问或者任务不可计算,那么对这个问或任务的描述哪⼀句是正确的( ) A.该问或任务所需计算时间是⾮线性增加的 B.⽆法将该问或任务所需数据⼀次性装⼊内存进⾏计算 C.图灵机不可停机 D.该问或任务所需计算时间是线性增加的 2下⾯哪⼀句话准确描述了摩尔定律( ) A.摩尔定律描述了计算机的计算速度每⼀年半增长⼀倍的规律 B.摩尔定律描述了互联⽹所链接节点随时间不断增长的规律 C.摩尔定律描述了计算机的体积⼤⼩随时间不断减少的规律 D.摩尔定律描述了计算机内存⼤⼩随时间不断增长的规律 3下⾯哪个⽅法于20世纪被提出来,⽤来描述对计算机智能⽔平进⾏测试( ) A.费马定理 B.摩尔定律 C.图灵测试 D.⾹农定律 41955年,麦卡锡、明斯基、⾹农和诺切斯特四位学者⾸次提出"artificial intelligence(⼈⼯智能)"这个概念时,希望⼈⼯智能 研究的主是( ) A.避免计算机控制⼈类 B.全⼒研究⼈类⼤脑 C.⽤计算机来模拟⼈类智能 D.⼈⼯智能伦理 5下⾯哪⼀句话是正确的 ( ) 得分/总分 A.⼈⼯智能就是深度学习 B.⼈⼯智能就是机器学习 C.机器学习就是深度学习 D.深度学习是⼀种机器学习的⽅法 6以逻辑规则为核⼼的逻辑推理、以数据驱动为核⼼的机器学习和以问引导为核⼼的强化学习是三种⼈⼯智能的⽅法,下⾯哪⼀句话 的描述是不正确的( ) A.以逻辑规则为核⼼的逻辑推理⽅法解释性强 B.⽬前以数据驱动为核⼼的机器学习⽅法可从任意⼤数据(⽆论数据是具备标签还是不具备标签)中来学习数据模式,完成给定 任务 C.强化学习的基本特征是智能体与环境不断进⾏交互,在交互过程不断学习来完成特定任务 C.强化学习的基本特征是智能体与环境不断进⾏交互,在交互过程不断学习来完成特定任务 D.⽬前以数据驱动为核⼼的机器学习⽅法需要从具有标签的⼤数据中来学习数据模式,完成给定任务 7下⾯对⼈类智能和机器智能的描述哪⼀句是不正确的( ) A.⼈类智能能够⾃我学习,机器智能⼤多是依靠数据和规则驱动 B.⼈类智能具备直觉和顿悟能⼒,机器智能很难具备这样的能⼒ C.⼈类智能具有⾃适应特点,机器智能则⼤多是"依葫芦画瓢" D.⼈类智能和机器智能均具备常识,因此能够进⾏常识性推理 8下⾯哪句话描述了现有深度学习这⼀种⼈⼯智能⽅法的特点( ) A.⼤数据,⼤任务 B.⼩数据,⼤任务 C.⼩数据,⼩任务 D.⼤数据,⼩任务 9、20世纪30年代,围绕可计算这⼀重要思想,⼀些模型被提出。下述哪个模型不是于这个时期在可计算思想推动下产⽣的( ) A.lambda 演算 B.冯诺依曼模型 C.图灵机 D.原始递归函数 10德国著名数学家希尔伯特在1900年举办的国际数学家⼤会中所提出的"算术公理的相容性 (the compatibility of the arithmetical axioms)"这⼀问推动了可计算思想研究的深⼊。在希尔伯特所提出的这个问中,⼀个算术公理系统是相容的需要 满⾜三个特点。下⾯哪个描述不属于这三个特点之⼀( ) A.完备性,即所有能够从该形式化系统推导出来的命,都可以从这个形式化系统推导出来。 B.可判定性,即算法在有限步内判定命的真伪 C.复杂性,即算法性能与输⼊数据⼤⼩相关 D.⼀致性,即⼀个命不可能同时为真或为假 第七章 1下⾯对逻辑斯蒂回归(logistic regression)描述不正确的是( ) A.逻辑斯蒂回归是⼀种⾮线性回归模型 B.在逻辑斯蒂回归中,输⼊数据特征加权累加值在接近 或+ 附近时,模型输出的概率值变化很⼤ C.逻辑斯蒂回归中所使⽤Sigmoid函数的输出形式是概率输出 D.在逻辑斯蒂回归中,能够实现数据特征加权累加 2 逻辑斯蒂回归模型(logistic regression)属于( ) A.监督学习 B.⽆监督学习 C.以上都不是 D.半监督学习 3潜在语义分析属于( ) A.以上都不是 B.⽆监督学习 C.监督学习 D.半监督学习 4线性区别分析属于( ) A.⽆监督学习 B.以上都不是 C.半监督学习 D.监督学习 5逻辑斯蒂回归函数也可被称为( ) A.最⼤似然估计回归模型 B.最⼤后验估计回归模型 C.交叉熵回归模型 D.对数⼏率回归(log-odds regression) 6在隐性语义分析中,给定M个单词和N个⽂档所构成的单词-⽂档矩阵(term-document)矩阵,对其进⾏分解,将单词或⽂档映射到 ⼀个R维的隐性空间。下⾯描述不正确的是( ) A.这⼀映射过程中需要利⽤⽂档的类别信息 B.通过矩阵分解可重建原始单词-⽂档矩阵,所得到的重建矩阵结果⽐原始单词-⽂档矩阵更好捕获
谁拿了最多奖学金 • 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: • 1) 院士奖学金,每人8000元,期末平均成绩高于80分( >80),并且在本学期内发表1篇或1篇以上论文的学生均可获得; • 2) 五四奖学金,每人4000元,期末平均成绩高于85分( >85),并且班级评议成绩高于80分(>80)的学生均可获得; • 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分( >90)的学生均可获得; 4) 西部奖学金,每人1000元,期末平均成绩高于85分( >85)的西部省份学生均可获得;5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得; • 只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。 • 例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金 和班级贡献奖,奖金总数是4850元。现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总 有同学能满足获得奖学金的条件)。 Input 输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。 • 接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是 否是西部省份学生,以及发表的论文数。姓名是由大小写 英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0 到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。 Output 输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上 的学生获得的奖金最多,输出他们之中在输入文件中出现 最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。 • • Sample Input Sample Output 4 YaoLin 87 82 Y N 0 ChenRuiyi ChenRuiyi 88 78 N Y 1 9000 LiXin 92 88 N N 0 28700 ZhangQin 83 87 Y N 1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是丝豆呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值