有 n 个玩具小人围成一圈,已知它们的职业和朝向。现在第 1 个玩具小人告诉小南一个包含 m 条指令的谜题,其中第 i 条指令形如“左数/右数第 si 个玩具小人”。你需要输出依次数完这些指令后,到达的玩具小人的职业。
1.玩具谜题【NOIP2016提高组】
输入格式
输入的第一行包含两个正整数 n ,m ,表示玩具小人的个数和指令的条数。
接下来 n 行,每行包含一个整数和一个字符串,以逆时针为顺序给出每个玩具小人的朝向和职业。其中 0 表示朝向圈内,1 表示朝向圈外。保证不会出现其他的数。字符串长度不超过 10 且仅由小写字母构成,字符串不为空,并且字符串两两不同。整数和字符串之间用一个空格隔开。
接下来 m 行,其中第 i 行包含两个整数 ai,si ,表示第 i 条指令。若 ai = 0 ,表示向 左数 si 个人;若 ai = 1 ,表示向右数 si 个人。保证 ai 不会出现其它的数,1 ≤si<n 。
输出格式
输出一个字符串,表示从第一个读入的小人开始,依次数完 m 条指令后到达的小人的职业。
样例数据 1
输入 [复制]
7 3
0 singer
0 reader
0 mengbier
1 thinker
1 archer
0 writer
1 mogician
0 3
1 1
0 2
输出
writer感想:本题很简单,只用简单模拟便好,注意mod时要判断是否为0,若为0,则当前位置为n;
题目描述
小 C 同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。《天天爱跑步》是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。
这个游戏的地图可以看作一一棵包含 n 个结点和 n-1 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树上结点编号为从 1 到 n 的连续正整数。
现在有 m 个玩家,第 i 个玩家的起点为 Si ,终点为 Ti 。每天打卡任务开始时,所有玩家在第 0 秒同时从自己的起点出发,以每秒跑一条边的速度,不间断地沿着最短路径向着自己的终点跑去, 跑到终点后该玩家就算完成了打卡任务。 (由于地图是一棵树, 所以每个人的路径是唯一的)
小 C 想知道游戏的活跃度, 所以在每个结点上都放置了一个观察员。 在结点 j 的观察员会选择在第 Wj 秒观察玩家, 一个玩家能被这个观察员观察到当且仅当该玩家在第 Wj 秒也正好到达了结点 j 。 小 C 想知道每个观察员会观察到多少人?
注意: 我们认为一个玩家到达自己的终点后该玩家就会结束游戏, 他不能等待一段时间后再被观察员观察到。 即对于把结点 j 作为终点的玩家: 若他在第 Wj 秒前到达终点,则在结点 j 的观察员不能观察到该玩家;若他正好在第 Wj 秒到达终点,则在结点 j 的观察员可以观察到这个玩家。
输入格式
第一行有两个整数 n 和 m 。其中 n 代表树的结点数量, 同时也是观察员的数量, m 代表玩家的数量。
接下来 n-1 行每行两个整数 u 和 v ,表示结点 u 到结点 v 有一条边。
接下来一行 n 个整数,其中第 j 个整数为 Wj, 表示结点 j 出现观察员的时间。
接下来 m 行,每行两个整数 Si 和 Ti ,表示一个玩家的起点和终点。
对于所有的数据,保证 1≤Si,Ti≤n,0≤Wj≤n 。
输出格式
输出 1 行 n 个整数,第 j 个整数表示结点 j 的观察员可以观察到多少人。
样例数据 1
输入 [复制]
6 3
2 3
1 2
1 4
4 5
4 6
0 2 5 1 2 3
1 5
1 3
2 6
输出
2 0 0 1 1 1
感想:本题是day1最难的一道,运用了许多“小技巧”,需要一定的能力;
首先思考lca,一个重要性质是deep【x】-deep【i】=w【i】;所以我们可以将lca到x路径上的所有点都打上标记为x;
这样就方便查询和修改。接下来我们就只需要在s(起点)和t(终点)上+1,在lca及其父亲上-1,这样每个节点的num就为
题目描述
对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。
在可以选择的课程中,有 2n 节课程安排在 n 个时间段上。在第 i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室 ci 上课,而另一节课程在教室 di 进行。
在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的 n 节安排好的课程。如果学生想更换第 i 节课程的教室,则需要提出申请。若申请通过,学生就可以在第 i 个时间段去教室 di 上课,否则仍然在教室 ci 上课。
由于更换教室的需求太多,申请不一定能获得通过。通过计算,牛牛发现申请更换第 i 节课程的教室时,申请被通过的概率是一个已知的实数 ki ,并且对于不同课程的申请,被通过的概率是互相独立的。
学校规定,所有的申请只能在学期开始前一次性提交,并且每个人只能选择至多 m 节课程进行申请。这意味着牛牛必须一次性决定是否申请更换每节课的教室,而不能根据某些课程的申请结果来决定其他课程是否申请;牛牛可以申请自己最希望更换教室的 m 门课程,也可以不用完这 m 个申请的机会,甚至可以一门课程都不申请。
因为不同的课程可能会被安排在不同的教室进行,所以牛牛需要利用课间时间从一间教室赶到另一间教室。
牛牛所在的大学有 v 个教室,有 e 条道路。每条道路连接两间教室,并且是可以双向通行的。由于道路的长度和拥堵程度不同,通过不同的道路耗费的体力可能会有所不同。当第 i(1≤i≤n-1)节课结束后,牛牛就会从这节课的教室出发,选择一条耗费体力最少的路径前往下一节课的教室。
现在牛牛想知道,申请哪几门课程可以使他因在教室间移动耗费的体力值的总和的期望值最小,请你帮他求出这个最小值。
输入格式
第一行四个整数 n,m,v,e 。n 表示这个学期内的时间段的数量;m 表示牛牛最多可以申请更换多少节课程的教室;v 表示牛牛学校里教室的数量;e 表示牛牛的学校里道路的数量。
第二行 n 个正整数,第 i(1≤i≤n)个正整数表示 ci ,即第 i 个时间段牛牛被安排上课的教室;保证 1≤ci≤v。
第三行 n 个正整数,第 i(1≤i≤n)个正整数表示 di ,即第 i 个时间段另一间上同样课程的教室;保证 1≤di≤v。
第四行 n 个实数,第 i(1≤i≤n)个实数表示 ki ,即牛牛申请在第 i 个时间段更换教室获得通过的概率。保证 0≤ki≤1。
接下来 e 行,每行三个正整数 aj ,bj ,wj ,表示有一条双向道路连接教室 aj ,bj ,通过这条道路需要耗费的体力值是 wj;保证 1≤aj,bj≤v,1≤wj≤100
保证 1≤n≤2000,0≤m≤2000,1≤v≤300,0≤e≤90000。
保证通过学校里的道路,从任何一间教室出发,都能到达其他所有的教室。
保证输入的实数最多包含 3 位小数。
输出格式
输出一行,包含一个实数,四舍五入精确到小数点后恰好 2 位,表示答案。你的输出必须和标准输出完全一样才算正确。
测试数据保证四舍五入后的答案和准确答案的差的绝对值不大于 4×10-3。(如果你不知道什么是浮点误差,这段话可以理解为:对于大多数的算法,你可以正常地使用浮点数类型而不用对它进行特殊的处理)
样例数据 1
输入 [复制]
3 2 3 3
2 1 2
1 2 1
0.8 0.2 0.5
1 2 5
1 3 3
2 3 1
输出
2.80
感想:这道题还行定一个dp【n】【n】【2】,然后提交转移就行了;
dp[i+1][j][0]=min(dp[i][j][0]+dis[a[i]][a[i+1]],
dp[i][j][1]+k[i]*dis[b[i]][a[i+1]]+(1.0-k[i])*dis[a[i]][a[i+1]]);
dp[i+1][j+1][1]=min(dp[i][j][0]+k[i+1]*dis[a[i]][b[i+1]]+(1.0-k[i+1])*dis[a[i]][a[i+1]],
dp[i][j][1]+k[i]*k[i+1]*dis[b[i]][b[i+1]]+k[i]*(1.0-k[i+1])*dis[b[i]][a[i+1]]+(1.0-k[i])*k[i+1]*dis[a[i]][b[i+1]]+(1.0-k[i])*(1.0-k[i+1])*dis[a[i]][a[i+1]]);
有点长,k【i】是i点申请成功的概率,dis是距离然后就出来了;
总结:
这次题目难度1,3,2;所以做题时应选好先后顺序避免卡死在一道题上;
还有就是dp很容易考要掌握,顺便说一下概率和期望,NOIP估计是要开始引入了,大家该了解一下;
题解代码我重发一份博客,有兴趣可以来借鉴;