NOIP2016提高组D1T2 天天爱跑步】的更多相关文章

n<=300000个点的树,每个点有个人于第Ti秒观测,有m<=300000个人于时间0开始从Sj跑到Tj,速度1个点每秒,输出每个点上的人观察到的跑步的人的数量. 前25分:直接模拟每条路径,先s跑到lca再跑到t,边跑边记时间,如果经过某个点时时间刚好一样就该点答案++. Si等于1的20分:观察人能观察到,只有他观察的时间和深度相等的时候.而一个跑步人跑下来就是这条链上满足“观察时间等于深度”的点答案+1,这可以用一个差分标记解决,如下图. 这样,最后从根节点开始向下dfs,一路上把标记…
#261. [NOIP2016]天天爱跑步 描述 提交 自定义测试 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含 nn 个结点和 n−1n−1 条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 11 到 nn 的连续正整数. 现在有 mm 个玩家,第 ii 个玩家的起点为 SiSi,终点为 TiTi.每天打卡任务开始时,所有玩…
原文链接https://www.cnblogs.com/zhouzhendong/p/9275606.html 题目传送门 - 洛谷P1600 题目传送门 - LOJ#2359 题目传送门 - Vijos P2004 题意 给定一个有 $n$ 个节点的树,每一个节点有一个观察员,编号为 $i$ 的节点上的观察员会在 $W_i$ 时刻出来观察. 现在有 $m$ 个热爱健身的人,其中第 $i$ 个从节点 $S_i$ 开始,到 $T_i$ 结束. 从时刻 $0$ 开始,每一个人同时以每秒一条边的速度沿…
[题意]n个点的树,有m个人同时开始走链,每一步花一秒,n个点都有观察员在ai秒观察,求每个观察员观察到的人数. [算法]树上差分(主席树||线段树合并) [题解]一个人的走链可以拆成u-lca和lca-v两部分,可以发现在u-lca链上的点能观察到这个人的w[x],满足所有deep[x]+w[x]相等.同理,在lca-v链上需满足deep[x]-w[x]相等.(画个图,将深度和秒数都标出来就可以得到结论了) 所以可以得到一个点观察到链u-v的条件是[在u-lca上且deep[x]+w[x]=d…
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合…
[题解]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]DAY1 T2 天天爱跑步 Description 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.?天天爱跑步?是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 N个结点和N-1 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从1到N的连续正整数. 现在有个玩家,第个玩家的起点为Si ,终点为Ti  .每天打卡任务开始时,所有玩家在第0秒同时从自己的起点出发, 以每秒跑一条边的…
题目 小 C 同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏. <天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一棵包含 n 个结点和 n − 1 条边的树,每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从 1 到 n 的连续正整数. 现在有 m 个玩家,第 i 个玩家的起点为 Si ,终点为 Ti .每天打卡任务开始时,所 有玩家在第 0 秒同时从自己的起点出发,以每秒跑一条边的速度,不间断地沿着…
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 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…
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()…
T1 玩具迷题 直通 思路: 1.首先根据数据范围来看,储存小人的姓名开一个二维char数组即可(不会开爆) 2.然后看他给出的样例以及条件什么的,能够确定出 ①朝内向右,朝外向左均为+ ②朝内向左,朝外向右均为- 但是需要注意的是 加完之后超出最大数n-1(我从0开始进行计数),所以需要进行-n 减完之后小于0的话,需要进行+n 3.使问题更简单的方式 (y是移动步数) if(y>n) y=y%(n+); (不懂的话可以手动模拟一下) 上代码: #include <iostream>…
P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大…
题目大意: 有一棵n个点的树,每个点上有一个摄像头会在第w[i]秒拍照. 有m个人再树上跑,第i个人沿着s[i]到t[i]的路径跑,每秒钟跑一条边. 跑到t[i]的下一秒,人就会消失. 问每个摄像头会拍下几个人. 思路: 首先很显然是要求LCA的. 求完LCA怎么办? 我们可以用树上差分的方法分别维护向上.向下的链. 每一条路径,我们可以在s,t,lca,par[lca]上分别打标记. s +dep[s] t +dep[t]-len lca -dep[s] par[lca] +len-dep[t…
对于一条路径,s-t,位于该路径上的观察员能观察到运动员当且仅当以下两种情况成立:(d[ ]表示节点深度) 1.观察员x在s-lca(s,t)上时,满足d[s]=d[x]+w[x]就能观察到,所以我们在这条路径上每个点都放置一个d[s]的物品(差分实现),所有路径处理完后dfs一遍,查询每个节点d[x]+w[x]的物品有多少个就是该种情况的答案. 2.观察员x在lca(s,t)-t上时,同理有d[s]+d[t]-2*d[z]-w[x]=d[t]-d[x],移项的d[s]-2*d[z]=w[x]-…
首先声明这不是一篇算法独特的题解,仍然是"LCA+桶+树上差分",但这篇题解是为了让很多很多看了很多题解仍然看不懂的朋友们看懂的,其中就包括我,我也在努力地把解题的"思维过程"呈现出来,希望能帮助到别人.实在是佩服那些考场AC的大牛,再次向你们献上敬意! 1. 第一步 首先可以初步判断这个题肯定要计算LCA,方法有倍增/Tarjan-DFS,我们就写个简单的倍增吧,使用链式前向星存储边. 选择1号结点开始dfs,别的结点也可以 dfs过程中计算fa[][]数组(fa…
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格以上,道理显然. 当时我可能是石…
刚看到这道题:这题直接用堆+模拟不就可以了(并没有认真算时间复杂度) 于是用priority_queue水到了85分-- (STL大法好) 天真的我还以为是常数问题,于是疯狂卡常--(我是ZZ) 直到我下了组数据,结果它跑了--跑了--10s (这叫我怎么卡常) OK,闲聊到次结束,接下来说正解 其实这道题并不需要用堆,因为我们可以蚯蚓其实是满足单调性的,因为后切的蚯蚓一定要比先切的短,所以堆是不必要的,我们只用三个队列,分别记录没被切的蚯蚓.被切了的短的蚯蚓.被切了的长的蚯蚓,每次把三个队列的…
题目描述 组合数表示的是从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代表该测试点总共有多少…
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…
那么我们开三个不上升队列, 第一个记录原来的蚯蚓, 第二个记录乘以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/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/problemnew/show/P1600 感觉这两天在处理边界问题上有点神志不清......为了从80的暴力变成100,花了整整一个下午+一个晚上的时间(还好最后还是搞了出来) 题目大意:给你一棵树N个点的无根树,有M个人要从Si走到Ti,行走速度为每秒一条边.对于树上任意节点i,求出所有经过该点时行走时间恰好为Wi的路径数量.且这M个人到达终点后下一秒会立即消失. 先来说说暴力,写得妙的话,这题暴力可以拿80分(是不是很良心??) 这种…
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=2827 首先考虑暴力:每次都是拿最长的蚯蚓,容易想到用堆.每次除拿出来的以外所有的蚯蚓都增长,容易想到用一个懒惰标记来记录所有的蚯蚓增长了多少.取最大的元素出来后加上标记的值,放元素进去的时候减去标记的值.这时已经可以骗到60分了. 假设某一次取出来的元素长度为x,当前标记的值为inc,切完以后放进去的就是(x+inc)p-(inc+q).(x+inc)(1-p)-(inc+q)两个元素由于(x+inc)p-(inc…
https://www.luogu.org/problem/show?pid=2831 BFS 看到N这么小就可以想到搜索,求最少步数显然应该用BFS. 在这题中过两猪可以唯一确定一条抛物线,每一步可以发射两只猪确定的一条抛物线(打下这条抛物线上的所有猪),也可以发射一条只经过一只猪的抛物线(只打下这只猪). 这时可以想到状压存储每个状态,并且读入所有猪时预处理一下每两只猪确定的抛物线. 两点确定一条过原点的抛物线y=ax2+bx的方法:点(x1, y1) (x2, y2)过抛物线,得y1=ax…