SCOI2014题解
SCOI2014由极不靠谱的电子坑爹大学出题。电子坑爹大学打破了多年行规,暴力+NOIP500分居然不能进队。极其逗比的第一天暴力给10分!!还好有些题不是很难,省队爷分数大概在150以上(最高420)
Day1
第一题由于YY可以发现,提升[l,r]不如提升[l,n],所以列出一个状态f[i][j]表示现在扫到的值为i时,该位置被提升j次的答案,很明显,该状态有两种转移路径:
1.f[i][j] = f[k][j] + 1 (k<i) 从比i小的中找到最大的,肯定f[k][j]>=f[k][j-1]
2.f[i][j] = f[k][j-(k-i)-1] + 1 (k>=i) 从比i大的中找到一个最大的,因为k >= i 所以 k那个位置需要比 i 这个位置少提升(k-i-1)次
这个方程是O(n^2)的,寻找优化方式
将状态的二维数组列成一张表,那么第一个方程就是要询问某一行某前缀中的最大值,可以用树状数组维护,而第二个需要询问某一条斜线的某前缀的最大值,将状态变化一下或者写二维树状数组都可以,转状态的方法是因为原状态需转移的格子中两下标和一定,就维护和和第一个和总和的差,就又变成前缀了,每次是log的,代码量1K左右
第二题的40分做法,存一个排名的树,记录每个节点的father,询问某节点就不断往上走,统计排名,提到第一名和最后一名也很简单是树的基本应用,查询第K也是最基本的,但是100分做法n<=10^8,那么就用每个节点存区间这样搞。。。代码量估计4K+
第三题是一道防AK的烂题,暴力连样例都过不了你说个毛啊,不是T是WA啊!!题解大概就是可以分区嘛,找规律抵消嘛,然后亦或的前缀和有周期规律嘛,4为周期嘛,谁爱写谁写吧
Day2
第一题一眼分数规划,加大一条边流量1的费用为b+d,减小流量1的费用为a-d,然后按这个建图,如果有负环那么沿着这条路走不回减小流量,但是会减小费用,减小多少就是这个环的权值和,然后要让平均每条边的费用最大,那我们就二分这个值,每次找负环的时候给每条边加上这个值,找到就说明还可以变大。用dfs版的SPFA非常快,是一道分数规划的好题。
第二题直接粘Artanis的题解,其方法完虐标程,给两秒时限全部0.1以内出解
DAY2 T2:这道题数位DP,时限3秒,但我认为标程方法拙了,要不时限开0.2秒都跑的下来,不信你看看BZOJ 3598跑的最快的速度吧(有人问我是不是打表TAT),名字什么的不要太在意,话说Onion Movie作为高级黑还是推荐没看过的去看一看呢。
我的算法说来很快很简单- -,数位DP的部分是最基础的水平。先不妨让所有的数都把石子移动到第1位,就可以得到初始总代价Cost,但我们发现这样对于很多数显然不优,我们就可以考虑都多少数从第1位改为第2位会更优,具体优多少,又有多少数从第2位改为第3位会更优……直到从倒数第二位移动到倒数第一位会更优,容易发现这样我仍然可以保证每个数都被我移到了最优情况。然后只用具体考虑有多少数从第i位移到第i+1位更优,优多少,我们可以发现,当一个数从第i位移到第i+1位时代价的变化量等于前i位的和减去i+1位至末位的和,然后就是简单的数位咯O(∩_∩)O!就是直接记录填到第k位的数字之和,如果k<=i就是加,否则就是减,最后的DP[s]就表示有多少个数满足从第i位移动至i+1位能优-s下来。
复杂度应该是log()^3*k^2,反正属于秒跑的那种,再次吐槽标程一定写拙了,时限给那么大,够我跑⑨⑨次都不止吧……
考场上秒A,毕竟是水数位DP嘛(∩_∩)
第三题是计算几何?NO,主要是DP,枚举任意两点连线分开,然后在验证,如果分割线上有多个点,暴力搞搞只有50分,在分割线上作DP。。。不想写了,太麻烦(懒)
考试时100+10+0+100+30+30拿了270,第六名,算上NOIP400就第八了。还好吧,进了省队。以后还要多多学习,好好学习,听海观涛(误)
SCOI2014题解的更多相关文章
- SCOI2014极水的题解- -
话说SCOI都考了1个月了,终于拿出决心把题解补完了,但都说了是极水的题解,大家就看着玩吧- - DAY1 T1:目标是找最长不降子序列,先就有一个比较显然的结论,就是假如我们要拔高区间[L, R], ...
- 洛谷 P3285 / loj 2212 [SCOI2014] 方伯伯的 OJ 题解【平衡树】【线段树】
平衡树分裂钛好玩辣! 题目描述 方伯伯正在做他的 OJ.现在他在处理 OJ 上的用户排名问题. OJ 上注册了 \(n\) 个用户,编号为 \(1\sim n\),一开始他们按照编号排名.方伯伯会按照 ...
- 【题解】Luogu P3287 [SCOI2014]方伯伯的玉米田
原题传送门 一眼就能看出来这是一道dp题 显而易见每次操作的右端点一定是n,每株玉米被拔高的次数随位置不下降 用f(i,j) 表示以第i 株玉米结尾它被拔高了j 次的最长序列长度. \(f(i,j)= ...
- [SCOI2014]方伯伯的玉米田 题解(树状数组优化dp)
Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- 利用stylist插件,简单两步屏蔽新浪微博上的广告
以前新浪微博只是在侧栏有几块小小的广告,还算可以接受,想着忍忍就算了,可最近真是越来越不厚道了,自从和淘宝合作之后,侧栏就开始有一大块广告根据你在淘宝的搜索记录推荐商品,更可恶的是信息流里的祛痘微博现 ...
- PAT 1085 PAT单位排行
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤10^5),即考生人数.随后 N 行,每行按下列格式给出一个考生的信 ...
- Apache 流框架 Flink,Spark Streaming,Storm对比分析(2)
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2.Spark Streaming架构及特性分析 2.1 基本架构 基于是spark core的spark s ...
- [luoguP2280] [HNOI2003]激光炸弹(DP)
传送门 二位前缀和DP大水题 ——代码 #include <cstdio> #include <iostream> ; int n, r, ans; int sum[MAXN] ...
- H5存储------localStorage和sessionStorage
web现在随着计算机的高速发展,客户端干的事情越来越多了,随着事情的增多,很多东西存储就不止在服务器了,本地存储越来越强大了(大神原谅我废话了
- 【BZOJ3790】神奇项链(manacher,树状数组)
题意: 思路:生成一些回文拼起来使生成的段数最小 显然存在一种最优的方案,使生成的那些回文是目标串的极长回文子串 求出对于每个位置的最长回文子串,问题就转化成了: 给定一些已知起始和终止位置的线段,求 ...
- CF899F. Letters Removing
给一个字符串支持以下操作:区间删除某个特定字符.最后输出字符串.n,m<=200000. 这题我居然不会可以回家了.. 首先,单点删除,选个平衡树比如set. 然后,他给的下标是会随删除操作变化 ...
- MVC WebApi 将返回值改为JSON格式
新增一个类: public class BrowserJsonFormatter : JsonMediaTypeFormatter { public BrowserJsonFormatter() { ...
- CentOS 7: Install vsftpd
Install vsftpd All commands should be run with ‘root’ user. Run the following command in terminal to ...
- python列表可以加可以乘
python列表可以加可以乘 list=['abcd',786,2.23,'runoob',70.2] tinylist = [123,'runoob'] print(list) print(list ...