ZROI2018提高day1t2】的更多相关文章

传送门 分析 考场上看错了第一个条件,于是觉得是个简单贪心,随便取了每一个点的最大收益然后算了一下,就得了40pts...看来读对题很重要呀qwq.实际的正解是这样的:我们将每一个i与f[i]连一条边,这样就构造出了一个基环内向树.我们记录到达每一个点的最大收益与次大收益,而对于每一个点我们均可以先取a[i]-1次最大收益.之后我们通过画图可以发现,对于一个环内,肯定会有一个节点取不到环边价值.所以我们枚举环上所有点(这个可以用tarjan解决),如果存在一个点i满足到达这个点的环边不是最大收益…
传送门 分析 我们首先想到的自然是根据大小关系建图,在这之后我们跑一遍拓扑排序 但是由于l和r的限制关系我们需要对传统的拓扑排序做一些改变 我们考虑将所有入度为0且现在的拓扑序号已经大于等于l的点放入一个优先队列,这个优先队列以r为关键字从小到大排序,这样我们就可以保证r小的点被排在前面 但是我们发现暴力判断l是否合法是行不通的,于是我们考虑再建一个优先队列,将所有入度为0的点以l为关键字从小到大排序,每次当队首l大于等于当前序号则弹出这个点,将这个点加入到r的那个优先队列中,这样我们就可以保证…
传送门 分析 将所有字母分别转化为1~26,之后将字符串的空位补全为0,?设为-1,我们设dp[p][c][le][ri]表示考虑le到ri个字符串且从第p位开始考虑,这一位最小填c的方案数,具体转移见代码. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #in…
传送门 分析 我们发现这个四元组可以分解成一个逆序对拼上一个顺序对,这个线段树搞搞然后乘一下就可以求出来了,但是我们发现可能有(a,b)为逆序对且(b,c)为顺序对的情况,所以要进行容斥,我们只需要枚举是哪一个点重合然后减掉即可. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cct…
传送门 分析我们可以根据性质将这个序列构造成一个环:0,a[1~n],0,a[n~1] 这中间的0是为了起间隔作用的. 我们又知道b[i]=a[i-1]^a[i+1] c[i]=b[i-1]^b[i+1]=a[i-2]^a[i]^a[i]^a[i+2]=a[i-2]^a[i+2] 所以如果这个环进化了2d次,则c[i]=a[i-2d]^a[i+2d] 所以我们二进制拆分一下就可以了. 代码 #include<iostream> #include<cstdio> #include&l…
传送门 分析 考场上傻了,写了个树剖还莫名weila...... 实际就是按顺序考虑每个点,然后从他往上找,一边走一边将走过的边染色,如果走到以前染过色的边就停下.对于每一个a[i]的答案就是之前走过的所有边的数量*2-它自己的深度. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<c…
传送门 分析 我们不难将条件转换为前缀和的形式,即 pre[i]>=pre[i-1]*2,pre[i]>0,pre[k]=n. 所以我们用dp[i][j]表示考虑到第i个数且pre[i]=j的情况下的方案数.我们发现一一转移的复杂度并不行,于是我们考虑只让dp[i-1][j]转移到dp[i][j*2],然后在利用前缀和的思想将dp[i][j]转移到dp[i][j+1],这样可以将复杂度优化到O(nk),然后使用滚动数组就可以了. 代码 #include<iostream> #inc…
传送门 分析 我们假设如果一个点是0则它的值为-1,如果一个点是1则值为1,则一个区间的答案便是max(pre[i]+sur[i]),这里的pre[i]表示此区间i点和它之前的的前缀的最大值,sur[i]表示i点之后的后缀最大值.所以为了维护每个区间的答案我们可以用线段树进行维护.而对于一个由两个区间拼成的区间它的答案只有三种 1. 由左区间所选的pre加上右区间的sur 2. 由左区间的全部加上右区间的pre和sur 3. 由左区间所选的pre和sur加上右区间的全部 而这个区间的答案即为这三…
传送门 分析 我们二分球的直径,然后就像奶酪那道题一样,将所有距离相遇直径的点用并查集连在一起,然后枚举所有与上边的顶距离小于直径的点和所有与下边的距离小于直径的点,如果它们被并查集连在一起则代表这个球无法通过.于是可以得到答案. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cct…
传送门 分析 一道贪心题,我们用两个优先队列分别维护卖出的物品的价格和买入但没有卖出的物品的价格,然后逐一考虑每一个物品.对于每一个物品如果他比卖出的物品中的最低个价格,则改将现在考虑的物品卖出,将之前价格最低的物品拿出重新考虑,否则继续考虑现在的物品.然后我们进行第二步考虑,考虑现在买入但没卖出的物品的价格最低的那个,如果现在这个物品价格大于他,则在这个地方卖掉它,否则在这个位置买入新物品. 代码 #include<bits/stdc++.h> using namespace std; #d…
传送门 分析 我们对于每一个可以匹配的字符都将其从栈中弹出,然后他的哈希值就是现在栈中的字符哈希一下.然后我们便可以求出对于哪些位置它们的哈希值是一样的,即它们的状态是一致的.而这些点可以求出它们的贡献(这个式子见代码).而这个式子的意义是对于左括号自然表示哪几个括号组成一个合法序列,而对于右括号则代表以几种不同的排列方式和之前的左括号进行匹配. 代码 #include<iostream> #include<cstdio> #include<cstring> #incl…
传送门 分析 我们设A[i]表示点i有几个矿,B[i]表示这之中有几个矿是第一次出现,所以点i的贡献即为 (2^B[i]-1)*(2^(A[i]-B[i])) 注意减一的原因是第一次出现的矿应至少有一个.然后我们用set维护一下就可以了. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<…
传送门 分析 我们可以用贪心的思想.对于所有并没有指明关系的数一定是将小的放在前面.于是我们按顺序在每一个已经指明大小顺序的数前面插入所有比它小且没有指明关系的数.详见代码. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cmath>…
传送门 分析 考场上写了前20分和|a[i]|<=1的情况,但是因为没开long long爆零了.实际考场上差不多想到正解了,至少当时不会凸壳... 我们发现对于ax2+bx的大小关系我们可以将其转换成ax+b,所以我们可以将这些直线求一个上凸壳和一个下凸壳,然后离线处理所有x,对于小于0的x找到下凸壳中这个x对应的值,而如果大于等于0则在上凸壳中找.对于凸壳的构造实际就和求一个边凸包一样,只需要比较第i条边和栈顶边的交点是否小于栈顶边和栈中第二个边的交点然后判断是否弹栈就可以了.注意这个题有一…
传送门 分析 考场上想到了先枚举p的长度,在枚举这个长度的所有子串,期望得分40~50pts,但是最终只得了20pts,这是因为我写的代码在验证中总是不断删除s'中的第一个p,而这种方式不能解决形如ababaa的字符串.于是我们考虑满分做法.设dp[i][j]表示在当前的p的情况下s的[i,j]位置是否满足.满足是指这一段区间只由p构成或者一部分只由p构成,另一部分则是p的前缀.对于位置j的字符可能有两种情况: 1.和之后数个字符拼成一段,转移: dp[i][j]|=(dp[i][j-1]&(s…
传送门 分析 在考场上我通过画图发现了对于n个点肯定用一个六边形围起来最优(假装四边形是特殊的六边形),我们发现可以将这个六边形分成两个梯形(梯形的高可以为0),然后我们便枚举两个梯形共同的底边和它们分别的高.代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype>…
我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P3952 作为一个在现场没有切出这题后来才\(A\)掉的弱鸡,我深感惭愧. 主要是因为在\(Day1T1\)上浪费了太多时间,导致根本没有时间写这道模拟题----出考场后我是这样想的,我还以为要是有时间我就可以\(440\)了----所以\(Day1T2\)我爆零了. 什么?你说这种水题我怎么还爆零?前\…
P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正确. A++语言的循环结构如下: F i x y 循环体 E 其中F i x y表示新建变量 ii (变量 ii 不可与未被销毁的变量重名)并初始化为 xx , 然后判…
P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费. 两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中.晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过 p . 他们想知道总共有多少种选择…
原文链接https://www.cnblogs.com/zhouzhendong/p/9275606.html 题目传送门 - 洛谷P1600 题目传送门 - LOJ#2359 题目传送门 - Vijos P2004 题意 给定一个有 $n$ 个节点的树,每一个节点有一个观察员,编号为 $i$ 的节点上的观察员会在 $W_i$ 时刻出来观察. 现在有 $m$ 个热爱健身的人,其中第 $i$ 个从节点 $S_i$ 开始,到 $T_i$ 结束. 从时刻 $0$ 开始,每一个人同时以每秒一条边的速度沿…
#261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含 nn 个结点和 n−1n−1 条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 11 到 nn 的连续正整数. 现在有 mm 个玩家,第 ii 个玩家的起点为 SiSi,终点为 TiTi.每天打卡任务开始时,所有玩…
P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物. 输入输出格式 输入格式: 输入文件名为 truck.in. 输入文件第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道 路. 接下来 m 行每行 3 个整数 x. y. z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y…
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示第一列火柴中第 i 个火柴的高度,bi 表示第二列火柴中第 i 个火柴的高度. 每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小.请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结…
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知道我学习java多线程开发是很难的,直到现在写这篇文章的时候,虽然我对java多线程里的API比以前熟悉更多了,但是如果碰到了生产开发里如何将多线程设计更好,我心里的底气还是不足的,哎,缺乏很有意义的实践,我现在要等待让我实践这部分技术的机会了. 话外话,研究多线程是因为我在一本讲并发编程的书籍里看…
 入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~    官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ------------------------------------------------------------------------------------ 旧资源全部删除,直接看整合版 http://tieba.baidu.com/p/3783667386?see_lz=1 ==========…
1.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数.此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度.但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写).哈希查找,会跟随被调用的函数一起执行.在某些情况下,你可以使用isset() 技巧加速执行你的代码. <span style="li…
在浏览器中对于Dom的操作和普通的脚本的操作处于两个不同的dll中,两个dll的交互是比较耗时的,优化对Dom的操作可以提高脚本的执行速度.下面是对如何优化的一些总结: 将需要多次操作的节点存储在一个变量中,避免多次获取. 对于大多数浏览器来说innerHTML操作比Dom操作速度要快,最新的浏览器则相反,但对于大多数日常操作来说具体差异并不大,另外,如果需要新创建的html片段中的脚本能够执行则需要使用Dom操作.       不建议用数组的 length 属性做循环判断条件.访问集合的 le…
原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升,则达到满意状态. 然而,可能性能根本不会提升,甚至还会降低. 无论处于何种情况,为了最大限度发挥 SIMD 执行的优势并实现性能提升,通常需要重新设计算法和数据布局,以便生成的 SIMD 代码尽可能高效. 另外还可收到额外的效果,即标量(非矢量化)版代码会表现得更好. 本文将通过一个 3D 动画算…
今天稍微复杂点的互联网应用,服务端基本都是分布式的,大量的服务支撑起整个系统,服务之间也难免有大量的依赖关系,依赖都是通过网络连接起来. (图片来源:https://github.com/Netflix/Hystrix/wiki) 然而任何一个服务的可用性都不是 100% 的,网络亦是脆弱的.当我依赖的某个服务不可用的时候,我自身是否会被拖死?当网络不稳定的时候,我自身是否会被拖死?这些在单机环境下不太需要考虑的问题,在分布式环境下就不得不考虑了.假设我有5个依赖的服务,他们的可用性都是99.9…
前言: if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为.键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要的逻辑,一段可以“正常运行”的代码就被我们实现了.尽管这段逻辑比较复杂,但在那个时间段,我们对这段业务的前后流程已经有了很长时间的思考,所以可以比较轻松的写出来.但问题来了,一段时间之后,我们发现这里需要修正下,更或者是为了提高鲁棒性,需要为某个变量考虑更多的情况——即进一步添加更多的if.然后,看…