【NOIP2016提高组】蚯蚓】的更多相关文章

刚看到这道题:这题直接用堆+模拟不就可以了(并没有认真算时间复杂度) 于是用priority_queue水到了85分-- (STL大法好) 天真的我还以为是常数问题,于是疯狂卡常--(我是ZZ) 直到我下了组数据,结果它跑了--跑了--10s (这叫我怎么卡常) OK,闲聊到次结束,接下来说正解 其实这道题并不需要用堆,因为我们可以蚯蚓其实是满足单调性的,因为后切的蚯蚓一定要比先切的短,所以堆是不必要的,我们只用三个队列,分别记录没被切的蚯蚓.被切了的短的蚯蚓.被切了的长的蚯蚓,每次把三个队列的…
题目大意: 给你n个不同长度蚯蚓,每秒从里面取出最长的砍下u/v变成两只,又把剩下的加长q. 问你在m之前的t,2t,3t...的时间上,砍的蚯蚓长度, 以及m秒后剩下所有的蚯蚓长度. 思路: 很容易想到用一个堆来解决,然而这样时间复杂度是O((m+n)log(m+n))的,过不去. 所以复杂度得是线性的. 考虑把原来的堆改成三个单调队列. 每个蚯蚓切成两半总会有一个长的.一个短的. 我们有q1维护原来的蚯蚓,q2维护砍下来长的一截蚯蚓,q3维护砍下来短的一截蚯蚓. 不考虑蚯蚓的生长,我们只需要…
题目链接 80分思路: 弄一个优先队列,不停地模拟,切蚯蚓时就将最长的那一条出队,然后一分为二入队,简单模拟即可.还要弄一个标记,表示从开始到当前时间每一条蚯蚓应该加上的长度,操作时就加上,入队时就减去,输出时也要加上,这样就不用一个一个加了. 80分代码:(注意:手打堆貌似会更快一些,能拿到85分左右,原理跟优先队列一样) #include<iostream> #include<cstdio> #include<fstream> #include<algorit…
容易想到的是用二叉堆来解决,切断一条蚯蚓,其他的都要加上一个值,不妨用一个表示偏移量的delta. 1.取出最大的x,x+=delta: 2.算出切断后的两个新长度,都减去delta和q: 3.delta+=q: 将其他长度都加上q不好实现,我们就把新的两条减去p,相对大小关系不变,最后还原即可. 但这还不是正解: 1 //复杂度mlogn,m过大,要超时 2 #include<bits/stdc++.h> 3 using namespace std; 4 int n,m,q,u,v,t; 5…
[题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问题 \(\text{[P2822]}\) 蚯蚓 \(\text{P[2827]}\) 愤怒的小鸟 \(\text{P[2831]}\) [Day1] 玩具谜题 \(\text{[P1563]}\) [T1] [题目描述] 有 \(n\) \((n \leqslant 10^5)\) 个小人围成一圈(…
[题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; inline int qr(){ register int ret=0,f=0; register char c=getchar()…
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合…
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛出了道杜教筛) 然后白天就脑补了几道 积性函数 把例题过了一遍 Submit_Time 1696174 wohenshuai 2154 Accepted 245432 kb 10556 ms C++/Edit 1152 B 2016-11-08 16:50:10 1695614 wohenshuai…
那么我们开三个不上升队列, 第一个记录原来的蚯蚓, 第二个记录乘以p的蚯蚓 第三个记录乘以(1-p)的蚯蚓, 在记录每条就要入队列的时间,就可以求出增加的长度 每次比较三个队列的队首,取最大的值x的切. 将xp加入第二个队列的队尾 将x(1-p)加入第三个队列的队尾 (第二个第三个队列保证单调,上面证明了) #include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #inc…
题目传送门:https://www.luogu.org/problemnew/show/P2827 自测时被题面所误导...,题面中说逢t的倍数才输出答案,以为有什么玄妙的方法直接将m次操作变成了m/t次操作.结果GG.... 65分做法:写一个左偏树,每次取出最顶端元素,对堆中其余元素全部+q(可以用标记完成),将该元素取出后,切为两段后再丢入该树中.时间复杂度为O((m+n) log m). 幸好我不会65分的STL做法,据说此题有人用STL被卡了5分..... #include<iostr…
https://www.luogu.org/problem/show?pid=2827 首先考虑暴力:每次都是拿最长的蚯蚓,容易想到用堆.每次除拿出来的以外所有的蚯蚓都增长,容易想到用一个懒惰标记来记录所有的蚯蚓增长了多少.取最大的元素出来后加上标记的值,放元素进去的时候减去标记的值.这时已经可以骗到60分了. 假设某一次取出来的元素长度为x,当前标记的值为inc,切完以后放进去的就是(x+inc)p-(inc+q).(x+inc)(1-p)-(inc+q)两个元素由于(x+inc)p-(inc…
Day2 T1 题目大意 告诉你组合数公式,其中n!=1*2*3*4*5*...*n:意思是从n个物体取出m个物体的方案数 现给定n.m.k,问在所有i(1<=i<=n),所有j(1<=j<=min(i,m))的(i,j)满足Cji是k的倍数的个数. 输入样例: 2 5 (两个数,第一个数t表示该数据有t组询问,第二个为k,接下来t行分别为n,m) 4 5 6 7 输出样例: 0 7 数据范围:1<=n,m<=2000,1<=t<=10000,1<=k…
题目传送门:https://www.luogu.org/problemnew/show/P2822                 ↓题目大意↓ 数据的极限范围:n,m≤2000,k≤21,数据组数≤10000. 由于此题k不大于21,故在计算组合数Cij时,并不需要存储它的真实数值,只需要存储其≤19的所有素因子的个数,判断Cij是否为k的倍数,仅需要判断Cij中各素因子的个数是否大于等于k中的个数即可.基于组合数的性质,我们如果要求出Cij,我们可以通过Ci(j-1)乘上i-j+1然后再除以…
洛谷秋令营day1模拟赛原地爆炸,心态崩了.于是打算写一下初赛题放松一下. 上次胡乱分析到了选择题,这次我想说说后面的题. 问题求解 T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能相邻,求方案数. 我敢保证当时考场上要是没人跟我说这题是斐波那契数列打死我也想不起来. 当时我的做法是依次考虑填多少个黑格,比如说填0个黑格,有1种方法,填1个黑格,有8种方法,填2个黑格,3个黑格,4个黑格.. 因为方格只有8个,而黑格不能相邻,所以黑格不能填到4格以上,道理显然. 当时我可能是石…
T1 玩具谜题 题目传送门 这道题直接模拟就好了哇 233 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int read(){ ,f=,c=getchar(); ; c=getchar();} +(c-'); c=getchar();} return ans*f; } ; ]; int h[M]; int main() { n=read(); m=read()…
题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算组合数的一般公式: 其中n! = 1 × 2 × · · · × n 小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足是k的倍数. 输入输出格式 输入格式: 第一行有两个整数t,k,其中t代表该测试点总共有多少…
#261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含 nn 个结点和 n−1n−1 条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 11 到 nn 的连续正整数. 现在有 mm 个玩家,第 ii 个玩家的起点为 SiSi,终点为 TiTi.每天打卡任务开始时,所有玩…
Day 1 T1 题目大意 一些naive的玩具小人把小南的眼镜藏起来,但小南有一份too simple的小纸条,告诉小南眼镜在第一个小人往哪数第几个的往哪数的第几个的往哪数第几个的往哪数的第几个的往哪数第几个的往哪数的第几个......那里,但是他们又不too young,有的职业是mengbier的小人朝内,有的职业是mogician的小人朝外,这意味着它们的左右方向是相反的,于是小南为了不让生命-1s,就来找了你来帮他+1s.+2s.+3s...... 输入样例 7 3 0 singer…
[题目描述] 最近国安人员截获了一份 RB 国的秘密情报, 全文都是经过加密的,每个单 词都很长.破译人员想到先把单词化简一下,方法是把每个单词尽量取短些的前 缀,但所取的前缀不能是其他单词的前缀. 这个任务现在就交给你来完成. 解释:“字符串 s1 是 s2 的前缀”是说把字符串 s2 的后面去掉某些,只保留 与 s1 相同长度是, s2 就与 s1 完全相同.如:“ abc“是” abcaade“和” abc“的 前缀,但不是” abadc“的前缀. 数据范围 单词数 N, 1<=n<=5…
题目链接:https://www.luogu.org/problemnew/show/P1850 此题正解为dp. 我们先用floyd处理出任意两个教室之间的距离,用dis[i][j]表示. 用f[i][j][0..1]表示在前i个课程中,用了j次换课的机会,第i节课选择换还是不换. f[i][j][0]可以选择用f[i-1][j][0]更新(即第i-1节课选择不换课),代价为dis[c[i-1]][c[i]]. 同时,第i-1节课也可以选择换课,若换课成功,代价为dis[d[i-1]][c[i…
https://www.luogu.org/problem/show?pid=1850 题面很长,实质很水的一道期望DP题.题面自带劝退效果. 首先用Floyd算出任意两点的最短路径.然后设f(i,j,0)为前i节课申请更换j节,且不申请第i节时的最小期望:设f(i,j,1)前i节课申请更换j节,且申请第i节时的最小期望.可得下面这个超长的状转方程:f(i,j,0)=min{ f(i-1,j,0) + dist(c[i-1],c[i]),    // 不申请第i-1节 f(i-1,j,1) +…
https://www.luogu.org/problem/show?pid=2831 BFS 看到N这么小就可以想到搜索,求最少步数显然应该用BFS. 在这题中过两猪可以唯一确定一条抛物线,每一步可以发射两只猪确定的一条抛物线(打下这条抛物线上的所有猪),也可以发射一条只经过一只猪的抛物线(只打下这只猪). 这时可以想到状压存储每个状态,并且读入所有猪时预处理一下每两只猪确定的抛物线. 两点确定一条过原点的抛物线y=ax2+bx的方法:点(x1, y1) (x2, y2)过抛物线,得y1=ax…
#include <iostream> using namespace std; int lps(string seq, int i, int j) { int len1, len2; if (i == j)//当i=j时,则此时扫描到的项是一定可以放入该回文子序列中并且对回文子序列的长度贡献为1 ; if (i > j)//当i>j时,即扫描到的左边的数在右边已经扫描过了,所以该项及往后的所有项都是已经扫描过的项,对回文子序列的长度贡献为0 ; if (seq[i] == seq…
#include <iostream> using namespace std; int main() { ][], b[][]; ]; string tmp; , j = , k = , total_len[], length[][]; cin >> n; getline(cin, tmp);//what?我也不懂这个tmp有什么用 ; i < n; i++) { getline(cin, c[i]); total_len[i] = c[i].size();//记录c[i]…
一.选择题 6.后缀表达式,使用二叉树来求解,正常情况下的表达式a*(b+c)- d为中序遍历的二叉树. 即 若转换为后缀表达式(左右根)则为abc+*d- 14.代数字进去,多试几遍: 三.问题求解 1.同斐波那契数列 F[n]表示有n个格子可以用来染成黑色时满足条件的染色方案数,则有 F[0]=1,F[1]=2; 对于第n个格子,有染黑色或不染黑色两种选择 若第n个格子染成黑色且两个相邻块不能都是黑色,则有剩下的n-2个格子可以用 若第n个格子不染成黑色,则有n-1个格子可以用,所以 F[n…
*已更新 胡乱分析的第三部分,程序填空(所谓的完善程序) 说到初赛,好像本周六就是了.哇好激动.. 填空题都是玄学.也许get到点了就会好做一些.. (标红的是填在空里的答案) T1.交朋友 (小矮个没人权系列,最后才让找) (快排判定条件展览大会) (让你成天用STL sort,傻逼了吧)“我们用排序+链表的方式帮助每一个人找到在他之前进入教室的并且和他身高最相近的人,由于我们直到所有人的身高和走进教室的次序,所以可以采用离线的做法来解决这样的问题.” 给定的程序大体思路是排序后从后往前算与每…
最近在做历年的初赛题,那我捡几道比较有代表性的题说一下好了 原题可以在这里看:https://wenku.baidu.com/view/10c0eb7ce53a580217fcfede.html?from=search 以下纯属个人胡乱分析,不爽不要看(误 单项选择 T2.一只小老鼠在键盘的Caps Lock键,A键,S键,D键上跳来跳去,问屏幕上输出的第81个字符. 显然是有周期性的,ASDSAasdsa为一个周期,可以得知T=10,所以第81个字符字符为81 % 10 = 1,即第一个字符A…
题目链接:http://uoj.ac/problem/265 题目大意: 太长了不想概括... 分析: 状压DP的模板题,把所有可能的抛物线用二进制表示,然后暴力枚举所有组合,详情见代码内注释 代码如下: #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; #define INIT() std::ios::sync_with_stdio(false);std::cin.tie…
原文链接https://www.cnblogs.com/zhouzhendong/p/9275606.html 题目传送门 - 洛谷P1600 题目传送门 - LOJ#2359 题目传送门 - Vijos P2004 题意 给定一个有 $n$ 个节点的树,每一个节点有一个观察员,编号为 $i$ 的节点上的观察员会在 $W_i$ 时刻出来观察. 现在有 $m$ 个热爱健身的人,其中第 $i$ 个从节点 $S_i$ 开始,到 $T_i$ 结束. 从时刻 $0$ 开始,每一个人同时以每秒一条边的速度沿…
题目传送门:https://www.luogu.org/problemnew/show/P2831 说个题外话:NOIP2014也有一道题叫做愤怒的小鸟. 这题自测时算错了eps,导致被卡了精度,从100卡剩80 由于此题n的范围特别小,所以考虑使用状压dp. 我们用一个整数i来描述状态,i的第k个bit表示第k只鸟是否被消灭,f[i]表示在这一状态下所需鸟的最小数量. 由于不在同一直线上的三个点确定一条抛物线,所以我们可以预处理出所有的可行抛物线,并确定在该抛物线上的鸟的编号(这一步对精度要求…