HZOJ 旋转子段】的更多相关文章

作者的正解: 算法一:对于30%的数据: 直接枚举区间直接模拟,时间复杂度O(N3). 算法二:对于60%的数据:枚举旋转中心点,然后再枚举旋转的端点, 我们可以用O(n)的预处理求前缀和记录固定点,总时间复杂度O(N2). 算法三:对于100%的数据:假设有最优解为[i,j](i,j皆为下标,A[i],A[j]才是题目所要输出的答案).if(A[i]!=j&&A[j]!=i),就是A[i]和A[j]经过旋转之后都没有成为不动点,那么[i+1,j-1]也是一个最优解(如果i+1>j-…
T1 旋转子段 30% 暴力枚举起点和长度,暴力判断,o(n3)  不知道为什么我拿了40分... 60% 每一个点都有一个固定的旋转中心可以转成固定点,枚举旋转点和长度. 100% 用一个vector存一下以此点为旋转中心,可以将哪些点转成好点,存区间的左右端点(i,a[i]),将区间长度从小到大排序,枚举中间点,再枚举以他为中心可以将哪些点转成固定点,由于按区间长度排序了,所以第几个点+1就是旋转后当前区间有的固定点个数.区间左右的用前缀和计算即可. #include<iostream>…
题目描述 $ZYL$有$N$张牌编号分别为$1,2,...,N$.他把这$N$张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多.如果第$i$个位置的牌的编号为$i$,我们就称之为固定点.旋转可以被认为是将其中的一个子段旋转$180$度,这意味着子段的第一张牌和最后一张牌交换位置,以及第二张牌和倒数第二张牌交换位置,等等.写一个程序,找到旋转子段(子段长度可以为$1$). 输入格式 第一行包含一个整数$N$.第二行有$N$个数,第$i$个数表示旋转之前第$i$个位置的牌的编号. 输出格…
旋转子段 连60分都没想,考试一直肝t3,t2,没想到t1最简单 我一直以为t1很难,看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a[i],i) 感性理解 举个例子,例如3 7 1 4 5 6 2 这个子段包含a[2]的最大为值域范围2----7 具体证明我不会 性质2 翻转后满足固定点对的点满足 a[i]+i==a[j]+j 证明 因为翻转之前a[i]==j&&a[j]==i才满足翻转之后都构成点对 移项得到a[i]+i…
description analysis 可以先用前缀和把原串不调整的方案数先求出来 对于一种翻转,肯定是把\([i..a[i]]\)或\([a[i]..i]\)这段区间翻转 也可以看做是以\({i+a[i]}\over 2\)这个点为翻转中心来翻转区间 于是把所有\(n\)个翻转中心搞出来,用\(vector\)存下翻转长度 对于每个翻转中心点,把翻转长度排一下序,从小到大做 由于当前长度翻转只会影响一个点从不合法点变成合法点,所以每次方案递增 左右端点\([l,r]\),每次\(l\)变小\…
题目: 大概意思就是给你一个序列,你可以选择一段区间使它左右翻折一遍,然后呢,从1到n找一遍,看a[i]==i的数最多是多少. 其实刚才我已经把暴力思路说出来了,枚举每一个区间长度,枚举每一个左端点,再查询a[i]的值,时间复杂度O(n^3^). 稍微优化一点,枚举每一个中点,左右扩展的同时查询,复杂度O(n^2^)(注意中点有可能不是点,可能是两个点中间,不考虑这个会被卡20分) 正解: 我们需要考虑下面两个性质: 性质1:对于一个点i,如果想让它满足条件,它的翻折区间是从i到a[i],在这个…
T1.rotate [问题描述] ZYL有N张牌编号分别为1, 2,……,N.他把这N张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多.如果第i个位置的牌的编号为i,我们就称之为固定点.旋转可以被认为是将其中的一个子段旋转180度,这意味着子段的第一张牌和最后一张牌交换位置,以及第二张牌和倒数第二张牌交换位置,等等.写一个程序,找到旋转子段(子段长度可以为1). [输入] 第一行包含一个整数 N (1 ≤ N ≤100 000). 第二行有N个数,第i个数表示旋转之前第i个位置的牌的…
垃圾成绩,一点都不稳定. 如果把数组开小的分得到的话..总分还挺不错.. 那又能怪谁,都快NOIP了还犯这种傻逼错误 nc哥是要阿卡的节奏..真是太强了 某kyh也不知道偷了谁的rp,分高的一批 wd从来很强..几乎就没失手过 就我一个渣渣还是这么没前途555 暴力的分不会拿555 想到正解拿不到分555 T1 旋转子段 貌似思路和题解并不一样,但是复杂度没区别,还比题解好理解(并不是) n^2:一个数要回到自己位置,旋转中心一定 用旋转中心的编号替代这个数的位置,不需旋转的数是他自己 用另一个…
我太难了 先说好没有代码T1 题目大意: 给定一些形如|ax+b|的式子,求最小的x使得它们的和最小. 算法一: 大家知道零点分段法 对于这n个式子我们有n+1个取值范围 使得展开这n个式子得到的新式子不同 而对于每一个形成的式子,因为我们有这个x的取值范围,所以我们可以在O(1)的复杂度求出它的最小值. 而我们从最左边的取值范围开始,对于相邻的两个取值范围我们可以用O(1)的复杂度转移,即我们可以用O(n)遍历所有可能形成的n个式子,每个算一下答案即可. 需要注意的是,对于所有a[i]=0,我…
当垃圾已经成为一种常态233333 A.旋转子段 考场上的$n^2$手残少了20分,555  (主要是因为实在打不出来$n^3$的做法所以写不了对拍?ccc为什么考场上没有想起有reverse()这么毒瘤的操作啊) 很显然要反转的区间两端一定是一对$i,a[i]$(具体谁在左谁在右看大小关系),因为如果不是的话它俩没啥用就完全可以去掉. 所以枚举所有的i和a[i]不断更新最优解就能得到答案,那么只要能够$O(1)$查询答案复杂度就可以保证了.不妨设当前枚举到的i<a[i],那么我们要查询的固定点…