首页 > CCA的排列
头像 M_sea
发表于 2020-09-05 22:28:32
模拟出一次操作后的排列,那么一次操作相当于乘上了这样一个置换。找出所有环,则每个数会在环上移动 步,按顺序求出环上的元素,那么加上 后对环长取模即可得到最后的数。 // ==================================== // author: M_sea // we 展开全文
头像 曾经不是人
发表于 2020-09-06 09:18:51
A 排列 做法,先建模,然后快速幂 m次反转为一次操作,第一次操作后的得到的数组为模式mode。 例如 mode=[3,2,1],其中mode[1]=3的含义为after[1]=before[3],即变换后数组的第1个位置存放原数组第3个位置的数。 操作之间满足交换率和结合律,可以类比乘法计算, 展开全文
头像 __故人__
发表于 2020-09-16 13:41:25
分析 这个可以暴力求出一个循环内的变换。这样可以考虑置换乘法的结合率,然后把置换拆成循环。这样是可以通过的。但是其实现在等同于只有一个操作重复 次,这个其实可以倍增优化,时间复杂度为 。 代码 #include<bits/stdc++.h> using namespace std; 展开全文
头像 牛客56905002号
发表于 2020-09-06 08:15:14
题目链接:https://ac.nowcoder.com/acm/contest/7225/A 题目描述 牛牛拿到了一个长度为N的排列和M个区间,一开始排列是1、2、3......N。 然后他将这些区间在按顺序在排列上翻转,全部翻转一遍称一次操作。 现在他要去搞文化了...所以拜托你告诉他经过K次操 展开全文
头像 Scarlet_Hypoc
发表于 2020-10-07 11:21:34
考虑枚举山峰的最右边位置 ,那么 ~ 是一个不下降序列, ~ 也是个不下降序列。 考虑一个最大高度为 的不下降序列的方案数,做一下差分,那么有若干个位置不为 ,且这些位置的总和为 ,那么相当于将 分给这 个位置,由于数字都大于 ,所以第一个位置的差分值至少为 ,所以实际上是将 分给 展开全文
头像 Ayonuasi
发表于 2020-09-06 12:20:02
一堆憨批题 A:直接倍增即可。离一血差10s,自闭。 #include<bits/stdc++.h> using namespace std; #define rep(i,x,y) for(int i=x;i<=y;i++) int n,m,k; const int N=1e5+ 展开全文
头像 肖先生~
发表于 2020-09-12 16:18:20
快速幂思想 题目描述牛牛拿到了一个长度为N的排列和M个区间,一开始排列是1、2、3......N。然后他将这些区间在按顺序在排列上翻转,全部翻转一遍称一次操作。现在他要去搞文化了...所以拜托你告诉他经过K次操作后的排列长什么样子。 题目分析刚刚开始看题目的时候一脸懵逼,没看懂题目的意思,不过想想毕 展开全文