[题解+总结]20150810

1、前言

今天是选拔考试第三天,所谓的省队难度,确实有点难,但是我们的发挥比实际难度还要差,暴力100分全场本年级的没有一个拿到,还有一大堆爆0的。好吧。cyb大神(@Delayyy)出的题,和他交流了一下,确实他看了成绩心情也是复杂的。三道题的话都是他国家集训队的作业题,CodeForces上面有英文原题,这下好了。这次考试不刻意作正解分析,更偏向于总结。

2、Tree 种树

大概题意:

在一个数列中种树,每过一个月树长高1m。每个月初,你会收到两种要求之一:在位置p种一棵高度为h的树;砍掉当前第x棵树,且保证以后不会再种。每次操作之后求其最长上升子序列。

总结:

这道题还是成功地把暴力打对了,直接模拟种树,砍树,用O(n log n)暴力求出最长上升子序列。考场上中间存在全部为种树操作的20分,但是n<=10^5,于是无聊写了个贪心自以为能够捞分,后来看了题解就打消了念头 = =。

题解(from Delayyy):

把每棵树看做二维平面上的一个点(pos[i],h[i]),那么最长上升子序列等价于:每个点只能走到自己右上方的点,走的最长的链。

定义f[i]表示从点i出发走的最长的链。我们发现,砍的树一定是最左边的10棵之一,种的树一定是最下的10棵之一。那么每次操作,我们删除对应的10个节点,然后按次序再逐个加入平面。每加入一个点,我们就要重新计算他的f值。

由于加入时一定x或y有序,所以只要查询另一个坐标的前缀f最大值。于是我们对x轴、y轴分别开一棵线段树来维护f值,这样每次加入一个点时,用O(log w)可以查询并计算出他的f值,再用O(log w)就能更新线段树。(w表示坐标范围)

// 自己慢慢看吧。。。

3、Matrix 数字矩阵

大概题意:

有一个形如这样的数字矩阵:

1  2  5  10  17  26

4  3  6  11  18  27

9  8  7  12  19  28

16    15     14      13       20  29

25    24     23      22  21  30

36    35     34      33  32  31

有t组询问,每次给定x1,y1,x2,y2,你需要计算这个子矩阵之和的后10位,特别地,如果超过10位,需要在数字前加上“...”。

总结:

这道题的暴力完全打错了。。。确实是太单纯了恩。注意,首先可以确定的是,对于某一个矩阵,要拆分成几个部分进行前缀矩阵的计算,但是在这个过程中,倘若你发现其数值大于10^10了就加上“...”,显然是不成立的,因为大于10^10的部分可能根本不在你所求矩阵之内(慢慢思考一下)。

同样还有一个问题需要考虑,若取余之后的数值<=10^9,要在“...”之后补充若干个0。具体做法参见题解中的分析,总而言之的话,做题不要太过于想当然吧。

题解(from Delayyy):

保留后10位等价于对10^10取模,然而这样是不够的,我们并不知道答案是否超过10位。解决方案是,再在mod 10^10+9的意义下做一次,可以大致认为答案不超过10^10当且仅当两次算出的答案一样。

令f[x][y]=a[i][j](1<=i<=x,1<=j<=y),对于每一组询问,转化为:

f[x2,y2]-f[x1-1][y2]-f[x2,y1-1]+f[x1-1][y1-1]。

首先我们可以发现,对于f[x][y],当x=y时,可以直接O(1)算出(等差数列和公式)。然后,当x!=y时,就存在一部分不属于直接计算部分,对面多出来的x行,每一行都是连续的若干数字(列也是同理),求出第一行的和S[1],给答案加上x*S[1],这样每一行剩下没计算的值形如:

1   1

2   2*t+2

3   3*t+2+4

4   4*t+2+4+6

求和起来为:t*i+2*i*(x-i-1) (1<=i<=x)

这个式子拆开就是一些i(1<=i<=n)和 i^2(1<=i<=n)和一些常数,都是可以O(1)求的。好吧由于mod有点大,要用O(log)的大数乘法,但是其实有一种O(1)的写法,省略。

4、Happy 愉悦

大概题意:

有一个数列a[1..n],每次你可以删除a[l..r],满足:|a[i]-a[i+1]|=1 (l<=i<r);2a[i]-a[i+1]-a[i-1]>=0(l<i<r)。删除长为x的连续一段可以获得val[x]的收益,求最大收益。

总结:

大概题意里没有提到,其实原题里面有一句很重要的话——每次删除之后两端的序列会重新连接起来!!!考试的时候看到了,但是由于最后时间比较紧,所以导致写DFS的时候没有去接啊。。。结果捧着个10分回来了。以后要多加注意细节啊。

时间: 2024-10-19 21:24:20

[题解+总结]20150810的相关文章

洛谷 P1079 Vigen&#232;re 密码 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1079 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用 M 表示:称加密后的信息为密文,用 C 表示:而密钥是一种

8.8联考题解

今天的T1让我怀疑我是不是在做奥赛题--这考的是什么知识点啊这个,会不会用绝对值函数? Evensgn 的债务 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Evensgn 有一群好朋友,他们经常互相借钱.假如说有三个好朋友A,B,C.A 欠 B 20 元,B 欠 C 20 元,总债务规模为 20+20=40 元.Evensgn 是个追求简约的人,他觉得这样的债务太繁杂了.他认为,上面的债务可以完全等价为 A 欠C20 元,B 既不欠别人,别人也不欠他.这样总债务规模就压缩到了 

POJ 2533 - Longest Ordered Subsequence(最长上升子序列) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK)

(leetcode题解)Pascal&#39;s Triangle

Pascal's Triangle  Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 题意实现一个杨辉三角. 这道题只要注意了边界条件应该很好实现出来,C++实现如下 vector<vector<int>> generate(int

2017ZZUACM省赛选拔试题部分题解----谨以纪念我这卡线滚粗的美好经历

写在前面: 其实心里有些小小的不爽又有点小小的舒畅,为啥捏?不爽当然是因为没被选拔上啦,舒畅捏则是因为没被选拔上反而让自己警醒,学长也提点很多很多."沉下去,然后一战成名"学长如是对我说,我很开心.其实这完全算不算是题解,只是我个人的一些小想法而已.而且到现在还有一题不会...让自己长点记性吧. 题目 A :聪明的田鼠 Time Limit: 1 Sec Memory Limit: 128 MB Description 田鼠MIUMIU来到了一片农田,农田可以看成是一个M*N个方格的矩

LeetCode-001题解

此题目摘自LeetCode001 Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.

leetcode题解: Next Permutation

最近还一直在刷leetcode,当然,更多时候只是将题解写在自己的电脑上,没有分享出来.偶尔想起来的时候,就写出来. public class Solution { public void nextPermutation(int[] nums) { if(nums==null||nums.length<=1) return; nextPermutationHelp( nums,0,nums.length-1); } public void nextPermutationHelp(int []nu

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● ai ∈ [0,n] ● ai ≠ aj( i ≠ j ) For sequence a and sequ

HDU 1045 Fire Net 二分图Bipartite题解

本题可以使用DFS直接爆搜出答案,不过这样类型的题目其实是个二分图的题解. 这个二分图,难不在Hungary算法,而是难在于建图.需要挺高的抽象思维的. 建图: 1 把同一行不被X分开的格子标同一个号码,被X分开的标下一个号码,这样做是为了缩点,不需要把所有的格子都分开标号,而且可以更方便建个更加小的图. 2 同理把同一列的格子标号 3 然后判断相同一个格子的行标号和列标号是有路径的,其他不在同一个格子的都是没有路径的. 4 这样就等于以行标号和列标号作为左右顶点,构建成一个二分图了 然后使用H