Dsecription n participants of «crazy tea party» sit around the table. Each minute one pair of neighbors can change their places. Find the minimum time (in minutes) required for all participants to sit in reverse order (so that left neighbors would be…
题目来源:UVa 10294 Arif in Dhaka (First Love Part 2) 题意:n颗珠子t种颜色 求有多少种项链和手镯 项链不可以翻转 手镯可以翻转 [分析] 要开始学置换了. 置换是什么呢?  置换的广义概念在不同语境下有不同的形式定义: 在集合论中,一个集合的置换是从该集合映至自身的双射:在有限集的情况,便与上述定义一致. 在组合数学中,置换一词的传统意义是一个有序序列,其中元素不重复,但可能有阙漏.例如1,2,4,3可以称为1,2,3,4,5,6的一个置换,但是其中…
UVA 11246 - K-Multiple Free set 题目链接 题意:一个{1..n}的集合.求一个子集合.使得元素个数最多,而且不存在有两个元素x1 * k = x2,求出最多的元素个数是多少 思路:推理一下, 一開始n个 先要删除k倍的,删除为{k, 2k, 3k, 4k, 5k, 6k...},会删掉多余的k^2,因此在加回k^2倍的数 然后如今集合中会出现情况的仅仅有k^2的倍数,因此对k^2倍的数字看成一个新集合重复做这个操作就可以.因此最后答案为n - n / k + n…
Burnside引理:对于一个置换\(f\), 若一个着色方案\(s\)经过置换后不变,称\(s\)为\(f\)的不动点.将\(f\)的不动点数目记为\(C(f)\), 则可以证明等价类数目为\(C(f)\) 的平均值. 也就是对于置换群中的某一个置换\(f\),\(C(f)\)为所有着色方案中,那些经过置换\(f\) 可以互相转换(即等价)的着色方案数 因为一个置换可以拆成若干个循环,置换中的每个元素可以看成是一个结点,那么每个节点必有一个出度和入度,所以肯定会形成若干个环,在置换\(f\)…
和UVa11077的分析很类似. 我们固定左脚的鞋子不动,然后将右脚的鞋子看做一个置换分解. 对于一个长度为l的循环节,要交换到正确位置至少要交换l-1次. #include <cstdio> #include <cstring> #include <map> using namespace std; + ]; int main() { //freopen("in.txt", "r", stdin); int T; scanf(&…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循环,则最少需要n-k次交换(循环内部交换)即可排序. 设f[i][j]表示将i个数至少交换j次排序完成的方案数,则有转移方程: f[i][j] = f[i-1][j]+(i-1)*f[i-1][j-1] 分别表示独立成为一个循环与加入前i-1个循环. [代码] #include<cstdio> #…
option=com_onlinejudge&Itemid=8&page=show_problem&problem=4336" style="">题目链接:uva 1561 - Cycle Game 题目大意:给出一个环,每次从起点開始,能够选择一个权值非0的边移动,移动后减掉权值至少1点. 不能移动的为失败. 解题思路: 1:有0的情况,假设有方向离权值为0的边的步数为奇数,则为必胜.否则必败. 2:无0的情况,奇数边必胜: 3:有1的情况.同…
/** 给定一个置换,看能不能存在一个置换A^2 = B 思路; 循环节长度为偶数n的置换只能由循环节长度为长度2*n 的置换A*A 而变得.所以只需求出循环节,看循环节长度为偶数的个数是否为偶数个即可.. 训练指南 **/ #include <iostream> #include <cstdio> #include <cstring> using namespace std; ; unsigned long long f[maxn][maxn]; int main()…
尤其是不要谈了些什么,我想A这个问题! FML啊.....! 题意来自 kuangbin: 亚瑟王要在圆桌上召开骑士会议.为了不引发骑士之间的冲突. 而且可以让会议的议题有令人惬意的结果,每次开会前都必须对出席会议的骑士有例如以下要求: 1.  相互憎恨的两个骑士不能坐在直接相邻的2个位置: 2.  出席会议的骑士数必须是奇数,这是为了让投票表决议题时都能有结果.   注意:1.所给出的憎恨关系一定是双向的.不存在单向憎恨关系. 2.因为是圆桌会议.则每一个出席的骑士身边必然刚好有2个骑士. 即…
Find the Permutations Sorting is one of the most used operations in real life, where Computer Science comes into act. It is well-known that the lower bound of swap based sorting is nlog(n). It means that the best possible sorting algorithm will take…
给出一个长度不超过500的环状排列,每次操作可以交换任意两个数,求把这个排列变成有序的环状排列所需的最小操作次数. 首先把环状排列的起点固定使其成为链状排列a,枚举排好序时的状态b(一种有2n种可能),则b可以看成是原状态a的一个置换,把a变为b所需的最小交换次数即为a的长度n减去置换循环节的数量. #include<bits/stdc++.h> using namespace std; typedef long long ll; +; const int inf=0x3f3f3f3f; in…
Sorting is one of the most usedoperations in real life, where Computer Science comes into act. It iswell-known that the lower bound of swap based sorting is nlog(n).It means that the best possible sorting algorithm will take at least W(nlog(n))swaps…
                                       Silly Sort Your younger brother has an assignment and needs some help. His teacher gave him a sequence ofnumbers to be sorted in ascending order. During the sorting process, the places of two numbers can beinter…
UVA 1156 - Pixel Shuffle 题目链接 题意:依据题目中的变换方式,给定一串变换方式,问须要运行几次才干回复原图像 思路:这题恶心的一比,先模拟求出一次变换后的相应的矩阵,然后对该矩阵求出全部循环长度,全部循环长度的公倍数就是答案 代码: #include <stdio.h> #include <string.h> const int N = 1100; int t, n, g[N][N], vis[N][N], save[N][N]; char str[N],…
题目链接:uva 11892 - ENimEN 题目大意:给定n堆石子的个数,两人轮流选择石子堆取石子,直到不能取为失败,附加条件,假设前一次操作,即队手的操作,没有将选中石子堆中的石子取完,那么当前操作者必须在该堆中取石子. 解题思路:仅仅要有一个石子堆的个数大于2,那么先手就获得必胜态,可控.对于全是1的情况推断奇偶性. #include <cstdio> #include <cstring> #include <algorithm> using namespace…
我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m) 不过神题的题解还须神人写.. We can associate at each cell a base 3-number, the log3(R) most significant digits is the index of the row of the cell and the log3(C) least significant digits is the index of his column. What…
看到了大神的代码.理解了好久...真是差距. 题意:给出m, p, a, b,然后xi满足已下两个公式, 求 xp1 + xp2 +...+ xpm 的最大值. 1.-1/sqrt(a) <= xi <= sqrt(a); (a>0) 2.x1+x2+...+xm = b*sqrt(a); 注意:p为偶数. 解题思路:因为p为偶数,所以sqrt(a)和-1/sqrt(a)的p次方都为正数且sqrt(a) > 1/sqrt(a).所以贪心思想时尽量先取sqrt(a);当已经取的xi的…
  Barbarian tribes  In a lost land two primitive tribes coexist: Gareds and Kekas. Every summer solstice they meet and compete to decide which tribe will be the favorite of the gods for the rest of the year, following an old ritual: First, a local gu…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35397 [思路] Polya定理. 旋转:循环节为gcd(i,n),i为偏移距离. 翻转:当n为偶数时,对称轴过点时循环节为n/2+1有n/2个,不过点时循环节为n/2有n/2个. 使用polya定理进行计数即可. [代码] #include<cstdio> using namespace std; typedef long long LL; +; LL pow…
题意:给定一个长度为 n 的序列,满足 1 <= ai <= i,要求确实每一个的符号,使得它们和为0. 析:首先这一个贪心的题目,再首先不是我想出来的,是我猜的,但并不知道为什么,然后在网上搜了一下题解,是什么数学归纳法...... 贪心策略:1~i的和或者部分和一定能凑出来1~sum[i]. 利用这个策略,也就是说,只要最后和是偶数,那么就一定有解,那这个解怎么求呢??我们先把所有的数从大到小排序,然后逆向计算,如果前 i-1 项和大于0, 那么就减掉第 i 项,否则就加上第 i 项,这样…
                           Find the Permutations Sorting is one of the most used operations in real life, where Computer Science comes into act. It iswell-known that the lower bound of swap based sorting is nlog(n). It means that the best possiblesor…
用6种颜色去染正方体的12条棱,但是每种颜色都都限制了使用次数. 要确定正方体的每一条棱,可以先选择6个面之一作为顶面,然后剩下的四个面选一个作为前面,共有24种. 所以正方体的置换群共有24个置换. 具体每种置换的情况就是:UVA 10601 Cubes 幸运的是,任意一个置换中的循环节长度都是相同的(有一种置换除外),所以在计算每个置换的“不动点”的时候就方便了很多. 调了好久调不对样例,后来发现C[0][0]没有初始化为1,=_=|| #include <cstdio> #include…
给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两个珠子间的距离,珠子0.2.4...构成一个循环,一共有gcd(n, 2)个循环,每个循环的长度为n / gcd(n, 2) 所以当一个循环的长度为奇数的时候,平方以后还是原来的长度: 当一个循环的长度为偶数的时候,平方以后就会分解为两个长度都等于原来循环长度一半的循环. 先将置换B分解循环,对于其…
1.     DES算法介绍: DES算法具有对称性, 既可以用于加密又可以用于解密.对称性带来的一个很大的好处在于硬件实现, DES 的加密和解密可以用完全相同的硬件来实现.DES 算法的明文分组是64 位, 输出密文也是64 位.所以密钥的有效位数是56 位, 加上校验位共64 位.总体流程如表1 所示:输入的64 位明文, 先经初始IP 变换, 形成64 位数据,64 位数据被分为两部分, 分别是L 部分和R 部分; L 和R 经过16 次迭代, 形成新的64 位; 新的64 位数据再经初…
UVA 12103 - Leonardo's Notebook 题目链接 题意:给定一个字母置换B.求是否存在A使得A^2=B 思路:随意一个长为 L 的置换的k次幂,会把自己分裂成gcd(L,k) 分, 而且每一份的长度都为 L / gcd(l,k).因此平方对于奇数长度不变,偶数则会分裂成两份长度同样的循环,因此假设B中偶数长度的循环个数不为偶数必定不存在A了 代码: #include <stdio.h> #include <string.h> const int N = 30…
UVA 11774 - Doom's Day 题目链接 题意:给定一个3^n*3^m的矩阵,要求每次按行优先取出,按列优先放回,问几次能回复原状 思路:没想到怎么推理,找规律答案是(n + m) / gcd(n, m),在topcoder上看到一个证明,例如以下: We can associate at each cell a base 3-number, the log3(R) most significant digits is the index of the row of the cel…
UVA 239 - Tempus et mobilius. Time and motion 题目链接 题意:这题题意也是吊得飞起,看了老半天,大概是这样: 有一个放球的队列.和3个轨道(说白了就是栈),一个容纳5,1个12,1个12,每1分钟队列出一个小球.放入栈.假设放入5的满了.就把5的放回队列,头一个放入12的.假设12的满了,就把12的放回队列.头一个放入还有一个12的栈,假设又满了.就所有放回队列(头一个最后放回),问多少天之后.队列中小球会回复原来的状态 思路:先是模拟求出一天的情况…
题意: 给定$n$和$k$,问有多少排列交换$k$次能变成升序 $n \le 21$ $uva$貌似挂掉了$vjudge$上一直排队 从某个排列到$1,2,...,n$和从$1,2,...,n$到某个排列是一样的 排列就是置换,分解循环,然后显然每个循环变成升序需要$len-1$次交换 然后有$t$个循环的置换需要$n-t$次交换 $DP$就行了$f[i][j]$表示前$i$个数有$j$个循环 其实可以发现就是第一类$stirling$数 注意:以后一定要测一遍极限会爆$long\ long$…
UVA 12293 - Box Game 题目链接 题意:两个盒子,一開始一个盒子有n个球.一个仅仅有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子.最后不能操作的输(球不能少于1个),Alice先手,问谁赢 思路:博弈.题目事实上能够转化为.给定一个n.每次把降低1到n/2的数字,最后谁是1谁就输了,那么能够去递推前几项找个规律,或者推理,都能够发现仅仅要是2^i - 1的数字Bob就赢,否则Alice赢 代码: #include <stdio.h> #include <s…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=989 题意: 输入一个C个点S条边(C≤100,S≤1000)的无向带权图,边权表示该路径上的噪声值.当噪声值太大时,耳膜可能会受到伤害,所以当你从某点去往另一个点时,总是希望路上经过的最大噪声值最小.输入一些询问,每次询问两个点,输出这两点间最优路径上的最大噪声值. 分析: 直接用…