2015 暑假集训14级第一周周赛解题报告

A.小模拟题

根据要求模拟即可。没什么可讲的。。

参考代码:http://paste.ubuntu.com/11978075/

B.组合计数

首先排序,然后可以在O(n)复杂度内求出每个hero所能拿的sword的最大范围。

然后可以从第一个开始拿,考虑对于当前第i个hero来说,假设第i个hero最多能拿到第j个sword,那么首先这j个中一定有i-1个已经被前i-1个拿到了,所以第i个只能从后面的剩下的j-i个中选,于是可以拿j-i个。然后用高中学到的组合数学的知识,将每一个的可选个数乘起来即可。

本题时间复杂度也是两次排序的复杂度,O(n*logn)。

参考代码:http://paste.ubuntu.com/11978123/

C.最大公约数

这题高中的积分知识就足够了。。然后加上个最大公约数就可以解决这题了。

参考代码:http://paste.ubuntu.com/11978143/

D.DP

首先,需要注意到,如果x可以整除y,y可以整除z,那么x一定可以整除z。于是本题可以转化成最简单的最长上升子序列的模型(仔细想想为什么)。

然而最长上升子序列的复杂度是O(n^2)的。所以剩下再考虑时间复杂度问题。对于这题来说,数字大小最多只有10^6,所以可以哈希一下,然后利用枚举倍数的方法。只从每个数的倍数中进行枚举。枚举倍数的复杂度是一个调和级数,即O(n/1+n/2+n/3+…+n/n)≈O(n*logn)对于10^6的数据规模已经足够。

参考代码:http://paste.ubuntu.com/11978177/

E.博弈论

这题可以找规律做出来。在这里给一个可以推出来的方法。

首先需要知道两个定义:必胜态和必败态。均指在当前的状态下先手必胜或者必败。

然后有两个定理:1.必胜态的下一步一定有一个是必败态。2.必败态的下一步一定全是必胜态。(仔细思考一下这两句话,这两句话是解决所有此类博弈论的基础)

然后,这题已知必败态是左下角,其他均未知。然后就可以根据那两个定理来不断的推出来。由于空间限制,,,直观图可以看这篇博客。传送门:http://blog.csdn.net/scf0920/article/details/39273327

参考代码:http://paste.ubuntu.com/11978223/

F.。。。

这题是2013年的成都邀请赛现场的签到题。。数据是不可能有坑的。。理解好题意,处理好几个细节就很简单了。

要注意到如果后面全报对的话,那么出错的肯定是第一个。还有出错的那个的后面的是根据出错的那个报的。报错的那个并不一定是把数字报大了。。

参考代码:http://paste.ubuntu.com/11978296/

G.优先队列+贪心

首先根据题意中的两个人的要求,可以贪心的去取,由于一个要拿大的,一个要拿小的,可以用两个优先队列来维护,然后每次取了之后,就要看一下取了这个之后,他所影响到的那些方块的状态是否已经处于可以被取走的状态,可以的话,就加入到优先队列中进行维护。然后由于坐标太大,普通哈希没法存储,可以用map来存储。然后剩下的就是不断的模拟这个过程直到全部被取完。

时间复杂度为O(n*logn)。

参考代码:http://paste.ubuntu.com/11978324/

H.字典树+并查集+欧拉回路

这题虽然用到了三个算法,但是其实并不难,三个算法是分别独立出现的。最后一个欧拉回路只需要用到一个知识:如果可以连起来的话,那么只要满足最多只有两个点的度数为奇数就可以。这个完全可以自己推出来。推算过程:中间的每个连接处都是相同的颜色,只有首末两端的点是可以不同颜色的,所以如果首末两端的点颜色不同,那么就只有这两个颜色的度数为奇数,如果相同,则都为偶数,因为中间的颜色都是两两出现的。然后知道了这个之后,就可以判断一下度数是否满足这个要求就可以了。然后还有需要注意的是,图可能会不连通,即虽然度数符合,但并没法形成一个图,所以要先用并查集判断一下是否连通。然后再考虑时间复杂度的问题。字符串太多,一个个的比对必定超时,可以将字符串转到字典树中。复杂度就降为所有字符的个数了。由于题目中说字符个数不超过80W,所以这个时间复杂度是足够的。不想重新写一遍代码了。。直接复制的第一次做的时候的代码,所以代码略挫。。见谅。。

参考代码:http://paste.ubuntu.com/11978375/

I.。。。。。

暴力找6种情况的最大值。。不多说了。。WA的童鞋再仔细想一下缺哪几种情况。。

参考代码:略。

J.思维题

这里n*logn的方法是过不去的。只能用O(n)的方法。方法有很多。最简单的一种是标记一下端点的状态。

这题的大体做法是先预处理出所有点上的总伤害预处理出来。然后O(1)的判断每个怪是否被杀掉。

预处理的过程中,标记一下每个端点的状态,比如将(左端点)加上伤害值,(右端点+1)减去伤害值,然后再遍历一遍,遍历过程中求出前缀和然后存起来。然后就可以查询的时候只需要判断一下血量值是否小于伤害值即可。

时间复杂度O(n)。

参考代码:http://paste.ubuntu.com/11978419/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-01 05:32:07

2015 暑假集训14级第一周周赛解题报告的相关文章

CSU-ACM暑假集训基础组训练赛(4)解题报告

•Problem A SPOJ SUB_PROB   AC自动机 •题意: 给定一个长为M(M≤100000 )的文本串,和N(N≤1000)个长度不超过2000的模式串,问每个模式串是否在文本串中出现过? •几乎和周一课件上的第一个例题一模一样.. •把文本串丢到AC自动机里面去跑. •注意: •1.可能有两个相同的模式串(略坑吧.) •2.一个模式串可能是另一个模式串的后缀,即如果一个点的fail指针指向的点是一个“危险节点”,那么它本身也是一个“危险节点”. 1 #include <ios

CSU-ACM2014暑假集训基础组训练赛(1) 解题报告

•Problem A HDU 4450                 水题,签到题 水题..没啥好说的.给大家签到用的. 1 #include <cstdio> 2 int main(){ 3 int n,a,ans; 4 while(scanf("%d",&n),n){ 5 ans = 0; 6 for(int i = 0;i < n;i++){ 7 scanf("%d",&a); 8 ans += a*a; 9 } 10 pr

CSU-ACM暑假集训基础组训练赛(2) 解题报告

Problem A Codeforces 451A •题意:给你n+m根筷子,将他们分别水平.垂直放置,形成n*m个节点.两个人轮流选择一个点,将穿过这个点的两根筷子拿走,谁可以逼迫对方率先无法继续操作,谁就获胜,问获胜的是先手还是后手. •找规律即可.n,m中较小的那个数是奇数,先手胜,否则后手胜. 1 #include <cstdio> 2 int main(){ 3 int a,b; 4 scanf("%d%d",&a,&b); 5 a = a <

南理工14级第四组 需求分析报告

软件需求分析报告 题目:<离散数学>课程测验系统 编写人员:高明 914106840518 刘建平 914106840526 王琪栋 914106840235 王金 914106840234 雷杨 914106840618 指导教师:叶庆生 1引言2 1.1编写目的 2 1.2背景 2 1.3定义 2 1.4参考资料 2 2任务概述2 2.1目标 2 2.2用户的特点 3 2.3假定和约束 3 3需求规定3 3.1对功能的规定 3 3.2对性能的规定 3 3.2.1精度3 3.2.2时间特性要

南理工14级第4组详细设计报告

离散数学考试测验系统<详细设计说明书> 1引言2 1.1编写目的 2 1.2背景 2 1.3定义 2 1.4参考资料 2 2程序系统的结构2 3程序1(标识符)设计说明2 3.1程序描述 3 3.2功能 3 3.3性能 3 3.4输人项 3 3.5输出项 3 3.6算法 3 3.7流程逻辑 3 3.8接口 3 3.9存储分配 4 3.10注释设计 4 3.11限制条件 4 3.12测试计划 4 3.13尚未解决的问题 4 4程序2(标识符)设计说明4 1引言 1.1编写目的 离散数学课程测验系

南理工14级第1组概要设计报告

目录 1引言 2 1.1编写目的 2 1.2范围 2 1.3定义 2 1.4参考资料 2 2总体设计3 2.1需求规定 3 2.2运行环境 3 2.3基本设计概念和处理流程 4 2.4结构 9 2.5功能需求与程序的关系 10 2.6人工处理过程 10 2.7尚未解决的问题 10 3接口设计10 3.1用户接口 10 3.2外部接口 10 3.3内部接口 11 4运行设计11 4.1运行模块组合 11 4.2运行控制 11 4.3运行时间 11 5系统数据结构设计12 5.1逻辑结构设计要点 1

【T^T】【周赛】第一周周赛——欢迎16级的新同学

借光光YZC的福气(今天拿到Rank1),本来还可以更好的,前面吃M去了,ABC都很晚切,而且异常兴奋,结果WA了好多发 A Describe:我们都知道,Home W的数学最厉害了.有一天,他又开始开动脑筋了,他想:“为什么数字总是要从1排列到n呢?”于是,Home W开始研究自己排列数字的方法.首先,他写下了1-n中所有的奇数(按照升序排列),然后他又写下了1-n中所有的偶数(按照升序排列),那么问题来了,在这样的排列方式下第k个数是什么呢? Solution:第一发getLL 结果int

FJUT16级第一周寒假作业题解I题

涨姿势题3 TimeLimit:1000ms  MemoryLimit:128000KB 64-bit integer IO format:%lld Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是

16级第一周寒假作业

涨姿势题2 TimeLimit:1000ms  MemoryLimit:128000KB 64-bit integer IO format:%lld Problem Description 涨姿势题就是所谓的优化题,在组队赛中,队伍发现了一题水题,那么应该交给谁去处理?作为处理水题的代码手,应该具备什么样的素养?1,要快,水题拼的就是速度!2,不能卡水题!水题都卡,绝对不是一个代码手的风范!3,不能出错,错一次即罚时20分钟,对于水题来讲是致命的!4,要能看出来一题是水题!没有这条,上面三条都是