[NOI 2009]变换序列】的更多相关文章

Description 题库链接 对于 \(N\) 个整数 \(0, 1, \cdots, N-1\) ,一个变换序列 \(T\) 可以将 \(i\) 变成 \(T_i\) ,其中 \(T_i \in \{ 0,1,\cdots, N-1\}\) 且 \(\bigcup_{i=0}^{N-1} \{T_i\} = \{0,1,\cdots , N-1\}\) . \(\forall x,y \in \{0,1,\cdots , N-1\}\) ,定义 \(x\) 和 \(y\) 之间的距离 \(…
noi2009变换序列 一.题目 1843 变换序列 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Description 对于N个整数0,1,…,N-1,一个变换序列T可以将i变成Ti,其中:Ti∈{0,1,…,N-1}且Ui=1 to n-1 {Ti}={0,1,…,N-1}.任意x,y∈{0,1,…,N-1},定义x和y之间的距离D(x,y)=min{|x-y|,N-|x-y|}.给定每个i…
http://www.lydsy.com/JudgeOnline/problem.php?id=1562 (题目链接) 题意 给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其中的元素不会改变,给出初始序列与变换后的序列每一位上的“距离”,求字典序最小的变换序列. Solution 每个位置上只有2种情况,很明显的二分图匹配.因为要求字典序最小,我们考虑匈牙利算法的运行方式,是保证当前匹配的点最优,所以连边时将字典序小的点尽可能后连,保证第一个邻接表第一个选出来的点是字典…
题目: http://cojs.tk/cogs/problem/problem.php?pid=409 409. [NOI2009]变换序列 ★★☆   输入文件:transform.in   输出文件:transform.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]        对于N个整数0, 1, ……, N-1,一个变换序列T可以将i变成Ti,其中 定义x和y之间的距离.给定每个i和Ti之间的距离D(i,Ti), 你需要求出一个满足要求的变换序列T.如…
任意门:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 题目: 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定义一个变换序列T0,T1,…,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,…,N-1的一个排列,任务是要求出字典序最小的那个变换序列. 题解: 二分建图是显而易见的,可是怎么处理字典序最小? 大神博客:https://www.byvoid.com/blog/noi-20…
对于\(N\)个整数\(0, 1, \cdots, N-1,\)一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中 \(T_i \in \{ 0,1,\cdots, N-1\}\)且 \(\bigcup_{i=0}^{N-1} \{T_i\} = \{0,1,\cdots , N-1\}\). \(\forall x,y \in \{0,1,\cdots , N-1\}\),定义\(x\)和\(y\)之间的距离\(D(x,y)=min\{|x-y|,N-|x-y|\}\).给定每个\…
[BZOJ1562][NOI2009]变换序列 题面 BZOJ 洛谷 这题面写的是真的丑,还是先手动翻译成人话. 让你构造一个\(0..N-1\)的排列\(T\) 使得\(Dis(i,T_i)\)为给定的值,如果有多个满足条件则输出字典序最小的那个. 其中,\(Dis(x,y)=min(|x-y|,N-|x-y|)\) 题解 这不一眼二分图匹配吗? 蛤?没了啊. #include<iostream> #include<cstdio> #include<cstdlib>…
[NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了两种. 解法一: 先求出它的一个完美匹配,把每个点扫一遍,如果它连的点是它能连的最小的了,就不管他,否则强制将当前节点与其能连的最小点对应,这时从这个点找增广路,如果有,就算修正成功,否则修正失败. 这个方法的好处是通用,时间复杂度O(n*n) 解法二: 从最后一个点开始求增广路,求增广路时优先考虑…
[Luogu 1963] NOI2009 变换序列 先%Dalao's Blog 什么?二分图匹配?这个确定可以建图? 「没有建不成图的图论题,只有你想不出的建模方法.」 建图相当玄学,不过理解大约也那么奇怪. 题里面对D(x,y)的定义那一长句,一开始没看明白,但实际会发现是一个环,而对于每一个点u,符合给定距离的点都有且只有2个(v1 && v2),连u->v1 && u->v2. 对于链式前向星选手,连边的时候注意先连终点序号大的,这样才能保证遍历时从小到…
[题目大意] 对于0,1,…,N-1的N个整数,给定一个距离序列D0,D1,…,DN-1,定义一个变换序列T0,T1,…,TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0,1,…,N-1的一个排列,任务是要求出字典序最小的那个变换序列.(概括by:BYVoid) [思路] 我们意识流现象一下.平时二分图匹配我们会根据从前往后,后面的会占用前方匹配,使得前方节点需要重新匹配.所以得出结论——后面的点会连到比较小的.那么我们就可以yy出这样一个做法:把每一个点连的边从小到大排序,…
[问题描述]        对于N个整数0, 1, ……, N-1,一个变换序列T可以将i变成Ti,其中 定义x和y之间的距离.给定每个i和Ti之间的距离D(i,Ti), 你需要求出一个满足要求的变换序列T.如果有多个满足条件的序列,输出其中字典序最小的一个.   说明:对于两个变换序列S和T,如果存在p<N,满足对于i=0,1,……p-1,Si=Ti且Sp<Tp,我们称S比T字典序小. [输入文件]        输入文件transform.in的第一行包含一个整数N,表示序列的长度.接下来…
P1963 变换序列 题目描述 对于N个整数0,1,-,N-1,一个变换序列T可以将i变成Ti,其中:Ti∈{0,1,-,N-1}且 {Ti}={0,1,-,N-1}. x,y∈{0,1,-,N-1},定义x和y之间的距离D(x,y)=min{|x-y|,N-|x-y|}.给定每个i和Ti之间的距离D(i,Ti),你需要求出一个满足要求的变换序列T.如果有多个满足条件的序列,输出其中字典序最小的一个. 说明:对于两个变换序列S和T,如果存在p<N,满足:对于i=0,1,-,p-1,Si=Ti且S…
目录 List Description Input Output Sample Input Sample Output HINT Solution 官方题解%莫队 Code Position: http://www.lydsy.com/JudgeOnline/problem.php?id=1562 List Description Input 输入文件 transform.in 的第一行包含一个整数 N,表示序列的长度.接下来的 一行包含 N 个整数 D i ,其中 D i 表示 i 和 T i…
[BZOJ 1563] [NOI 2009] 诗人小G(决策单调性) 题面 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的.小 G 给每首诗定义了一个行标准长度(行的长度为一行中符号的总个数),他希望排版后每行的长度都和行标准长度相差不远.显然排版时,不应改变原有的句子顺序,并且小 G 不允许把一个句子分在两行或者更多的行内.在满足上面两个条件的情况下,小 G 对于排版中的每行定义了一个不协调度, 为这行的实际长度与行标准长度…
P1963 [NOI2009]变换序列 题意 题目描述 对于\(N\)个整数\(0,1, \cdots ,N-1\),一个变换序列\(T\)可以将\(i\)变成\(T_i\),其中\(T_i \in \{ 0,1,\cdots, N-1\}\)且\(\bigcup_{i=0}^{N-1} \{T_i \} = \{0,1,\cdots,N-1 \}\),\(\forall x,y \in \{0,1,\cdots , N-1\}\),定义\(x\)和\(y\)之间的距离\(D(x,y)=min\…
洛谷 P2023 [AHOI2009]维护序列 洛谷传送门 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. 输入格式 第一行两个整数N和P(1≤P≤1000000000). 第二行含有N个非负整数,从左到右依次为a1,a2,-,aN, (0≤ai≤10…
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值. Input 第一行两个整数N和P(1≤P≤100000…
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1562 给一个序列Di表示min(|i-Ti|,n-|i-Ti|),求一个字典序最小的序列Ti sol:  对于每个i,能和它连边的只有i+di和(i-di+n)%n 将图转为二分图,左边为i,右边为Ti,跑匈牙利算法 为避免数组下标越界.memset-1之类麻烦的问题,右移一位处理 P.S.行末不能有空格,文末有回车 #include<iostream> #include<algor…
题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换. 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联.由于是字典序最小,显然需要贪心考虑.在匈牙利算法执行的过程中,对于每个点来说,可以优先匹配符合条件的最小的点:对于左边点集来说,可以从后往前进行匹配,这样可以保证字典序小的点更可能抢到字典序小的点. 代码如下 #include <bits/stdc++.h> #define pb push_back #define a…
题面 今天考试考了,于是开始糊学决策单调性DP 这是一个完全不会优化DP的人 决策单调性DP的一种优化方法是用单调队列优化 存下{左端点l,右端点r,最优决策点p}的三元组,按照单调队列的通常操作来说: (0.初始化,将整个序列丢进去) 1.弹队头:弹掉所有不合法的三元组(r<i的) 2.求答案,同时更新队头的左端点 3.弹队尾: ①如果队尾的决策点不如i优,说明队尾这整个三元组当前的决策点太靠前了,直接弹掉 ②当弹不掉时,根据决策单调性,队尾这个三元组后面的一部分决策点是i,前面的不是,二分出…
题面 考虑这个平方的实际意义,实际是说取两次取出一样的序列 那么设$dp[i][j][k][h]$表示第一次在上面取$i$个下面取$j$个,第二次在上面取$k$个下面取$h$个的方案数 等等$n^4$根本开不下+过不去啊=.= 发现$i,j,k$固定时$h$可以算出来,于是少一个$n$的复杂度 建议填表转移,每次从$dp[i][j][k]$转移过去,所以如果空间不够就把$i$滚掉 提示:被卡常的尝试统计的时候判一下是否有值就能过了... #include<cstdio> #include<…
Link: BZOJ 1562 传送门 Solution: 一道比较考对$Hungry$算法理解的题目 首先可以轻松看出原序列和答案序列的对应关系,从而建出二分图匹配模型 下面的关键在于如何保证字典序最小 第一种方式是暴力逐位确定: 对于$1....n$每一位都先贪心选取字典序小的节点,判断将该边除去后能否完全匹配,不能再修改 但这样复杂度明显是$O(n^3)$ 第二种方式是逆向匹配: 其实就是暴力贪心的思想,但逆序匹配后就不用判断了,省去了每次重复的判断: 从后往前对于每个点先选择字典序小的节…
Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤500:100%的数据中N≤10000. Source 这题是二分图应该不难看出来. 对于原序列中的一个点,对应两个可匹配的点. 关键是怎么保证字典序最小 如果是暴力删边+匈牙利的话是$O(n^3)$的. 这里有两种解决方法: 1.强制让$x$号点连向字典序小的点,对失配的点重新匹配 2.将所有边按…
(上不了p站我要死了,侵权度娘背锅) Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50: 60%的数据中N≤500: 100%的数据中N≤10000. (要不是我看不懂它在变什么...) 实际上就是对其中每个元素进行加di mod n或者是减di加n后mod n的操作. 那么每个元素都对应两个元素.而新的序列要求是排列,即不能有相同的.想到二分图匹配,就可得到一一对…
点此看题面 大致题意: 给你一个长度为\(n\)的序列\(D\),让你找到一个字典序最小的\(n\)的排列\(T\),满足\(D_i=min(|T_i-i|,n-|T_i-i|)\). 建图 我想建图应该是比较简单的吧. 对于给定的\(D_i\),我们可以发现对应的\(T_i\)实际上只有两种取值: 当\(D_i=|T_i-i|\)时,\(T_i=(i+D_i-1)\%n+1\). 当\(D_i=n-|T_i-i|\)时,\(T_i=(i-D_i+n-1)\%n+1\). 因此,将\(i\)向这…
题意 构造一个字典序最小的序列T,使得 Dis(i, Ti) = di,其中i是从0开始的,Dis(x,y)=min{∣x−y∣,N−∣x−y∣} ,di由题目给定. 思路 二分图匹配,把左边的看成i,右边看成Ti,对于固定的i和d,Ti是由两种可能的,连上有向边即可.至于字典序要最小,怎么做呢,我们可以反着跑匈牙利算法,就是从n-1跑到0,这样小一点的i,可以直接拿走大一点的i刚匹配的较小的值. #include <algorithm> #include <iterator> #…
[题目描述] 老虎和蒜头是好朋友. 众所周知,蒜头经常给老虎出一些题目,而老虎也常常被难倒,作为捧杯之王的老虎难免心有怨怼.今天,老虎发现了蒜头的一个序列 a​ .虽然老虎不知道这个序列是用来做什么的,但老虎还是希望搞点破坏--他计划把序列 a​ 全部变成 0​ . 然而,对蒜头的序列进行操作绝不是容易的事情.具体来说,老虎每次可以选择两个位置 i,j(i≠j) ,将 ai 和 aj 变为 ai⊕aj,其中 ⊕ 是异或操作. 然而,只将蒜头的一个序列变成 0 实在是不够解气.因此,老虎希望你能够…
求分数序列和 总时间限制:  1000ms 内存限制:  65536kB 描述 有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,.... ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2.比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13. 求这个分数序列的前n项之和. 输入 输入有一行,包含一个正整数n(n <= 30). 输出 输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位. 样例输入…
Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤500:100%的数据中N≤10000. 题解: 二分图匹配模型很显然,但是不要看到二分图就去网络流了...注意到题目要求的是字典序最小的!如果你用Dinic算法去多路增广,根本无法保证字典序,除非用EK.据说也有边增广边调整的搞法,但是这么多花式搞法,前提都是你不知道匈牙利算法!匈牙利算法是一种非…
1.题意:题意有些难理解 2.分析:我们发现如果要求判断是否合法的话就so easy了,二分图匹配即可,但是我们发现要求输出字典序最小的,那么我们在匈牙利的时候就倒着枚举,另外邻接表中的边一定要排好序,如果用的是链表的话,就从大到小,vector就从小到大插入,然后我们就可以保证字典序最小了,想了半天网络流QAQ,看了题解..匈牙利是啥都快忘记了... #include <cstdio> #include <cstdlib> #include <cstring> #in…