首页 > TAG信息列表 > JSOI2016
[JSOI2016]扭动的回文串
清新结论配上巨大码量的哈希解法 思路: 第一种情况和第二种情况很容易解决,可以直接求一个正向哈希值在求一个反转后的哈希值,然后枚举回文中心,二分扩展了多少即可。 思考扭动的回文串应该满足那些特性,首先,一定是一段满足情况 \(1\) 或情况 \(2\) 的子串 \(S\),然后左边添加了一些,右边P4322 [JSOI2016]最佳团体
原题链接 考察:树形dp+二分 思路: 化为01分数规划后,每个人的贡献是 p[i] - mid*s[i],注意一下后面并非图论问题,因为不需要回到源点.因为取某个人的条件是那个人的推荐人也在队列中,所以是树形背包问题. 普通的树形背包时间复杂度是O(n3),TLE是明显的.(所以本蒟蒻紧急学了树形背P4323-[JSOI2016]独特的树叶【换根dp,树哈希】
正题 题目链接:https://www.luogu.com.cn/problem/P4323 题目大意 给出\(n\)个点的树和加上一个点之后的树(编号打乱)。 求多出来的是哪个点(如果有多少个就输出编号最小的)。 \(1\leq n\leq 10^5\) 解题思路 定义一下\(hash\)值\(P(i)\) 我的做法是\(P(i)=p^i\),\(p\)是一个质数,当然P5774 [JSOI2016]病毒感染
题目链接 大致题意 有\(N\)个小镇爆发了疫情,其中第\(i\)个小镇每天会死\(a_i\)个人,现在从第一个小镇出发,每一天可以选择: 走向一个相邻的村庄,若往左走,则必须把之前所有未治愈村庄全部治愈 治疗目前所在的村庄,这一天内该村庄内不会有任何人死去 求最少死亡人数 \(n≤30P5774 [JSOI2016]病毒感染
间隙 大致题意 有\(n\)个疫情城市,每个城市\(i\)在未被治愈时每天会死\(a_i\)个人,现在从一号城市出发,每一天可以选择: 花费一天时间彻底治愈目前所在的城市的所有患者。这一天不会有任何患者死去; 花费一天的时间前往一个相邻的村庄,若往左走则需要沿路把左边所有未治愈的城市治愈[JSOI2016]灯塔/[POI2011]Lightning Conductor
题目 点这里看题目。 分析 直接变换式子: \[\begin{aligned} h_j\le h_i+p_i-\sqrt{|i-j|} & \Rightarrow p_i\le h_j+\sqrt{|i-j|}-h_i\\ & \Rightarrow p_i=\lceil\max\{h_j+\sqrt{|i-j|}-h_i\}\rceil\\ &【JSOI2016】炸弹攻击2
题目 枚举每一个发射源,对于当前发射源\(S_k\),将激光塔和敌人按照到\(S_k\)的向量的极角序排序。 如果存在\(D_l\)在两个激光塔\(T_i,T_j\)之间,且\(T_i,T_j\)的夹角小于\(\pi\),那么\((T_i,T_j,S_k,D_l)\)就是一组合法的四元组。 于是直接排序后双指针,对于每一个激光塔\(T_i\)求出距「JSOI2016」位运算
题目描述 JYY 最近在研究位运算。他发现位运算中最有趣的就是异或 *(xor)* 运算。对于两个数的异或运算,JYY 发现了一个结论:两个数的异或值为 $0$ 当且仅当他们相等。于是 JYY 又开始思考,对于 $N$ 个数的异或值会有什么性质呢? JYY 想知道,如果在 $0$ 到 $R-1$ 的范围内,选出 $N$ 个不「JSOI2016」无界单词
题目描述 对于一个单词 $S$ ,如果存在一个长度 $l$,满足 $0\lt l\lt |S|$,并且使得 $S$ 长度为 $l$ 的前缀与 $S$ 长度为 $l$ 的后缀相同,JYY 则称 $S$ 是有界的。比如 `aabaa` 和 `ababab` 就都是有界的字符串。如果一个单词不存在这样的 $l$ ,则 JYY 称之为无界单词。 现在考虑所有仅【JSOI2016】最佳团体
JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号 方便起见,JYY的编号是0号。每个候选人都由一位编号比他小的候选人Ri推荐 如果Ri= 0 ,则说明这个候选人是JYY自己看上的 为了保证团队的和谐, JYY 需要保证,如果招募了候选人i,那么候选人R;也一定需要在团队中。 当然了,JYY自【JSOI2016】扭动的回文串
题面 https://www.luogu.org/problem/P4324 题解 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#define N 100050#define uLL unsigned long long#define ri register intusing namespace std;const uLL p=1233107;int n;cha【JSOI2016】独特的树叶
题面 https://loj.ac/problem/2072 题解 #include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<map>#include<set>#include<algorithm>#define N 100500#define uLL unsigned long long#define ri register[JSOI2016]独特的树叶
仙题+1. 我们发现如果能够求出来\(A\)树中任何一个点当根的时候的\(Hash\)值,那么就可以求出答案了。 然后你随便写一写\(Hash\)策略改成\(xor\),发现\(xor\)的逆运算就是\(xor\),好啊! 换根\(dp\)直接求出我们需要的,然后放到\(set\)去就行了。 #include<stdio.h> #include<stdlib.h> #LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)
题面 传送门 题解 退火就好了 记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低 话虽如此然而我自己打的退火答案永远是\(0\)……只好抄了一发……但是完全看不出有什么区别啊…… //minamoto #include<bits/stdc++.h[JSOI2016]病毒感染[dp]
题意 有 \(n\) 个村庄按标号排列,每个村庄有一个死亡速度 \(a_i\) 表示每天死 \(a_i\) 人(除非你治好这个村庄)。 你从 1 号村庄出发,每天可以选择向相邻的村庄进发或者治愈所在的村庄。 如果在这个过程中你的左边有未治愈的村庄,同时你向左走了一步,那么你需要把这些村庄全部治p4322 [JSOI2016]最佳团体
传送门 分析 我们不难发现这是一棵树 于是01分数规划然后树上dp即可 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cmath> #include<cstdlib> #include<queue> #inLuogu P4323 [JSOI2016]独特的树叶
一道比较好的树Hash的题目,提供一种不一样的Hash方法。 首先无根树的同构判断一般的做法只有树Hash,所以不会的同学可以做了Luogu P5043 【模板】树同构([BJOI2015]树的同构)再来。 首先我们直接考虑一种朴素的想法,暴力求出\(A\)树中以每一个点为根时的Hash值 然后扔到一个set(你要再写