自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 POJ 2480 Longge's problem 欧拉函数

题意: Given an integer N(1 题解:公式:f(N)=∑x*φ(N/x),x | N (x是N的约数)因为在1···N中,gcd(i,N) = x, 的个数的等于φ(N / x)另外还可以利用函数的积性:对于正整数n的一个函数 f(n),当中f(1)=1且当a,b互质,f(ab)=f(a)f(b),在数论上就称它为积性函数。若某函数f(n)符合f(1)

2012-03-25 00:27:42 1828

原创 POJ 1809 Regetni 奇偶性

题意:给你许n个点,可以从中任选三个点组成一个三角形。问这些三角形中面积为整数的有多少(包括0)。题中给出一个面积公式:A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2 题解:本质上我们只要让x1y2 ,y1x2 , x2y3,y2x3, x3y1 ,y3x1这六项中奇数项的个数为偶数个,即0,2,4,6。所以我们把点分类:奇奇,偶偶,奇偶

2012-03-24 17:22:08 1232

原创 POJ 3590 The shuffle Problem 置换+DP

题意:对每一个置换T,都存在一个T^k = e。现在让你求一个n元置换,使得它的阶最大,即当T^k = e时,k最大。若同时存在多个这样的T,那么输出其中排序最小的。题解:由于每一个置换都可以分解成若干个轮换,那么这些轮换的阶的最小公倍数就是该置换的阶。所以题目可以变成这样:给你一个整数n,求n1+n2+n3```+ni = n。 并且n1,n2,```ni的最小公倍数最大。1.求最小

2012-03-24 00:51:05 2265

原创 POJ 3372 Candy Distribution 完全剩余系/奇偶性

题意:老师给N个学生发糖,第x次发糖发给编号为 f(x) 的学生。可以推知:f(x) = x * (x+1) / 2 % N(学生号为 0, 1, 2, 3, ```N-1 )现在问你是否每个学生都能得到至少一颗糖。题解:要使每个学生都至少得到一颗糖,那么f(x) 应该构成模N的完全剩余系。那么这个问题的反面就是在什么情况下,f(x) 不能构成模N的完全剩余系。我们知道若存在 x

2012-03-23 00:30:38 1704

原创 POJ 2128 Leonardo's Notebook 置换群开方

题意:输入一个字符串,由26的大写字母随机排列组成。置换的概念如下定义:例如 QWERTYUIOPASDFGHJKLZXCVBNM  表示进过置换换后A用Q替换,B用W替换,C用E置换,····问你ABCDEFGHIJKLMNOPQRSTUVWXYZ 这样一个初始字符串是否可以经过任意两次相同的置换得到输入的字符串。本质上就是问你,输入的字符串所代表的置换是否是任意一个置换的平方?题解

2012-03-22 19:29:55 1896

原创 POJ 1271 CARDS 置换/循环节/置换群开方

题意:直接引用潘震皓的论文《置换群快速幂运算》。[问题描述]剀剀和凡凡有N张牌(依次标号为1,2,……,N)和一台洗牌机。假设N是奇数。洗牌机的功能是进行如下的操作:对所有位置I(1≤I≤N),如果位置I上的牌是J,而且位置J上的牌是K,那么通过洗牌机后位置I上的牌将是K。剀剀首先写下一个1~N的排列ai,在位置ai处放上数值ai+1的牌,得到的顺序x1,x2, ..., xN作为

2012-03-21 23:01:24 2378

原创 POJ 1026 Cipher 置换

题意:有一种加密的方法,先给出 n 个数字的排列, 然后输入一个字符串,字符串长度 例如   4 5 3 7 2 8 1 6 10 9, Hello Bob, 然后从左到右让字符串的每一个字符与一个数字对应:4      5      3      7      2      8      1      6      10      9H     e       l       l

2012-03-21 22:03:24 1265

原创 POJ Cow Sorting 置换

题意:每只牛都有一个脾气值,即所谓“牛脾气”。Farmer John's想把他的N头牛排序,按脾气升。他每次可以交换任意两头牛,由于脾气越大越麻烦,每次交换的麻烦程度就是两头牛的脾气之和。求出排好序的最小麻烦程度。题解:刘汝佳黄亮书,P247-248。先确定置换。每个k阶置换都可以化成k个对换之积。#include#include#includeusing namespace

2012-03-21 18:43:44 633

原创 HDU Birthday Toy 特殊限制的polya

题意:用k中颜色给n个珠子涂色,注意相邻的两个珠子不能途同样的颜色,求不等价着色数mod 10000000007。另外这道题还有另一个条件,n个小珠子一定围着一个大珠子,所以必须从k中颜色里面选择一种颜色给大珠子着色。由于此题数据较大1那么主对角线上的元素全为0,其余全为1。而我们要的就是矩阵求幂后主对角元素的值。····分析很简单,但是画出来比较麻烦,直接借用:http://blog

2012-03-20 22:08:59 738

原创 POJ 2888 Magic Bracelet 有限制的polya

题意:给定n(n 解题思路:这题和POJ2154 题目大致相同,不同的是这里多了一个限制条件,即可能两种颜色不能涂在相邻的珠子上面。对于这种情况我们可以通过矩阵连乘得到,先初始化矩阵array[i][j]为1.如果颜色a和颜色b不能涂在相邻的珠子,那么array[a][b] = array[b][a] = 0; 对于具有n/L个循环节的置换(L为每个循环节的长度)。先求出array[][]

2012-03-19 22:52:17 879

原创 POJ 2154 Color polya计算+欧拉优化

题意:给出两个整数n和p,代表n个珠子,n种颜色,要求不同的项链数,翻转置换不考虑。结果模p.题解:我们知道gcd(i,n)表示了循环节的个数。例如gcd(2,6) = 2, 它的具体过程为:[1,3,5] [2,4,6]对于任意一个循环置换,他所有循环节的长度为 n / gcd(i,n),在上面的例子中: 循环节长度 = 6 / gcd(2,6) = 3为了方便说明,用L

2012-03-18 17:17:55 1725

转载 polya定理再小结

polya定理再小结  原来简单的总结过polya定理:http://www.cppblog.com/sdfond/archive/2009/05/12/82665.html  这里再次把一些polya定理的题目归一下类~  话说ICPC的题目是越来越难,因为经典的算法大家都知道了,因此出题的方向只能是要么把模型隐藏的很深,要么就把一系列算法知识综合起来考察,这个时候分析问题的能力

2012-03-18 16:33:27 846

转载 乘法逆元

若对于数字A,C 存在X,使A * X = 1 (mod C) ,那么称X为 A 对C的乘法逆元。逆元的作用?让我们来看下面的例子:12 / 4 mod 7 = ? , 很显然结果是3我们现在对于数对 (4,7), 可以知道 X = 2是 4 对7的乘法逆元即2*4=1(mod 7)那么我们有(12 / 4) * (4 * 2 ) = (?) * (1) (mod 7)除法被完

2012-03-18 10:57:13 3237

原创 POJ 2409 Let it Bead / 1286 Necklace of Beads Polya 计数

题意:用k种不同的颜色给长度为n的项链染色。题解:1.旋转置换:一个有n个旋转置换,依次为旋转0,1,2,```n-1。对每一个旋转置换,它循环分解之后得到的循环因子个数为gcd(n,i).2.翻转置换:分奇偶讨论。奇数的时候 翻转轴 = (顶点+对边终点的连线),一共有n个顶点,故有n个置换,且每个置换分解之后的因子个数为n/2+1;   偶数的时候 翻转轴 = (顶点+顶点

2012-03-17 22:57:48 808

原创 HDU 2461 Rectangles 容斥原理

题意:坐标系上有N个矩形,给出了他们的左下顶点和右上顶点。每次操作是对其中的R个矩形进行染色,然后要你输出这些被染色的矩形的面积之和(重叠部分不能重复计算)。题解:标准的容斥原理。#include#include#include#includeusing namespace std;struct Rectangle { int x1, y1, x2, y2;};Rectang

2012-03-17 12:22:29 1143

原创 HDU 1695 GCD 容斥原理+欧拉

题意:给你五个数a,b,c,d,k,令x ∈[a,b], y∈ [c,d]。求出有多少对(x,y)可以使gcd(x,y) == k。题中所有的a,b都等于1.题解:1. b /= k, d /= k, 这样就转换成求b,d之间有多少对互素。2.不妨令b3.当b #include#include#include#includeusing namespace std;

2012-03-17 11:15:06 896

原创 POJ 1845 Sumdiv 快速求幂+同余+乘法逆元

题意:给定A, B,求A^B的所有因数之和,并模9901。题解:1: 对A进行素因子分解得     A = p1^a1 * p2^a2 * p3^a3 *...* pn^an.  故 A^B = p1^(a1*B) * p2^(a2*B) *...* pn^(an*B);2:A^B的所有约数之和为:     sum = [1+p1+p1^2+...+p1^(a1*B

2012-03-15 21:03:30 1785

原创 POJ 2356 Find a multiple / 3370 Halloween treats 鸽巢原理

题意:给定n个正整数,从中任意的选出一些数,使他们的和能够被n整除。题解:《组合数学》P17#include#includeusing namespace std;const int MAXN = 20000;int sum[MAXN], num[MAXN], flag[MAXN];void print ( int s, int t ){ printf("%d\

2012-03-15 09:15:07 823

原创 POJ 2417 Discrete Logging 离散对数/BabyStep_GiantStep

题意:BL == N (mod P),并且p是素数题解:#include#include#includeusing namespace std;#define lint __int64#define MAXN 131071struct HashNode { lint data, id, next; };HashNode hash[MAXN<<1];bool flag

2012-03-14 22:36:04 1404

原创 POJ 3243 Clever Y 求A^X = B (mod C) / BabyStep_GiantStep

题意:求最小的x使得A^X = B (mod C)题解:【扩展Baby Step Giant Step解决离散对数问题】作者 AekdyCoin !【普通Baby Step Giant Step】【问题模型】求解A^x = B (mod C) 中 0 【思路】我们可以做一个等价x = i * m + j  ( 0 而这么分

2012-03-14 21:26:00 4055

转载 高斯消元法 & 高斯-约当 (Gauss-Jordan) 消元法

高斯消元法 & 高斯-约当 (Gauss-Jordan) 消元法  2010-05-24 18:02:10|  分类:控制理论|  标签:|字号大中小 订阅高斯消元法是求解线性方程组的常用方法,高斯约当消元法大家可能不是很熟悉。下面先介绍线性方程组和矩阵的一些基本概念与高斯消元法,然后着重介绍高斯约当消元法相对于高斯消元法的优势:程序简单(不需要回代),应用广泛(例

2012-03-10 21:35:17 10005

原创 POJ 3735 Training little cats (快速求幂,稀疏矩阵)

题意:给出三个整数n,m,k。表示有n只猫,k个操作(由以下三种组合而成),对这k个操作重复m遍。输出最后每只猫拥有的花生。g i : Let the ith cat take a peanut. 让第i只猫剥一个花生e i : Let the ith cat eat all peanuts it have.让第i只猫吃掉它所有的花生s i j : Let the ith cat an

2012-03-10 18:13:56 1168

原创 POJ 3233 Matrix Power Series 求S = A + A2 + A3 + … + Ak.

求:S = A + A2 + A3 + … +Ak.第一次代码:二分直接递归,很好理解。1250MS#include #define SIZE (1<<10)#define MAX_SIZE 32#define lint __int64using namespace std;class CMatrix{ public: int element[

2012-03-10 12:39:30 631

原创 POJ 3070 Fibonacci 用矩阵求费氏数列

题意:题解:#include #define SIZE (1<<10)#define MAX_SIZE 32using namespace std;class CMatrix{ public: int element[MAX_SIZE][MAX_SIZE]; void setSize(int); void

2012-03-10 09:51:14 720

原创 POJ 3185 高斯消元+DFS枚举自由变量

题意:奶牛有20只碗摆成一排,用鼻子顶某只碗的话,包括左右两只在内的一共三只碗会反向,现在给出碗的初始状态,问至少要用鼻子顶多少次才能使所有碗都朝上。#include#include#include#includeusing namespace std;int a[30][30], x[30];int fre[30], index[30], fnum;int equ, var,

2012-03-08 22:31:57 1997

原创 POJ 2065 SETI 环上的高斯

题意:输入一个素数P,一串字符串str,字符串的每个字符对应一个整数a=1,b=2,c=3····,*=0(输入字符只会是26个小写字母加上*)。例如str[] = "abc", 那么说明 n=3, 字符串所对应的数列为1, 2, 3。并且题中定义了一个函数:a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1), f(1) = str[

2012-03-08 20:33:18 939

原创 POJ 2947 Widget Factory 环上的Gauss

题意:饰品工厂生产一件饰品需要3-9天,现在知道一些工人的工作时间范围,以及他们生产出来的饰品种类。求每种饰品的生产所需的时间。题解:#include#include#include#include#includeusing namespace std;#define MAXN 310int a[MAXN][MAXN], x[MAXN];int equ, var;ch

2012-03-08 13:18:49 1276

原创 POJ 1830 开关问题 高斯消元

开关问题Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 3390 Accepted: 1143Description有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开

2012-03-07 20:23:52 1088

原创 POJ 1681 Painter's Problem 高斯消元+DFS枚举

题意:将下图中的格子由初始状态变为全黄,最少需要多少步。题解:先确定自由变量,然后枚举自由变量的值,注意剪枝。#include#include#include#includeusing namespace std;#define MAXN 230int a[MAXN][MAXN], b[MAXN];int index[MAXN], flag[MAXN]; //fla

2012-03-07 20:18:55 1001

转载 高斯消元

这学期开了线性代数。。。。终于对高斯消元算法有点认识了。。。。一般ICPC中的数学部分关于线性代数主要也就是高斯消元了。。就是传说中的gauss对于AX=B。的n个n元方程组。高斯消元的过程是将A加上B,变成扩展矩阵。然后将之变换位上三角矩阵。O(n^3)的变化。大致思路就是选择枚举n行,计算该n以下的所有行,将之对应的将第i列消为0,不

2012-03-07 16:03:19 13094

原创 POJ 1222 EXTENDED LIGHTS OUT 关灯游戏-高斯消元(列主元)

题意:关灯游戏,给出一个状态,求关灯方案。题解:由于控制矩阵是确定的,并且是满秩的,所以解唯一。#include#include#includeusing namespace std;#define MAXN 30int a[MAXN][MAXN], b[MAXN];int Gauss ( int n, int a[][MAXN], int b[] ){ in

2012-03-06 08:26:08 1436

原创 POJ 2886 Who Gets the Most Candies? (线段树模拟约瑟夫环)

题意:n个孩子做约瑟夫的游戏,第p个离开的孩子可以得到F[p]个糖果,问谁得到的糖果最多。其中F[p],表示p的因子的个数。题解:用线段树模拟约瑟夫环。不过用树状数组+二分应该也可以吧。另外貌似可以用“反素数”来剪枝,不过我不会,所以只能预处理下F[p]。#include#include#includeusing namespace std;#define MAX 50000

2012-03-03 16:04:43 1125

原创 POJ 2244 Eeny Meeny Moo 约瑟夫

题意:约瑟夫环问题,给定人数n,求一个步长m使得最后剩下的是2.#include#include#include#includeusing namespace std;int num[200];int Josephus ( int n, int m, int s ){ if ( m == 1 ) return ( s + n - 1 ) % n;

2012-03-02 19:38:19 821

原创 POJ 1781 In Danger 约瑟夫环(log(m))

#include#include#include#includeusing namespace std;//编号从0,1,2,···n-1//n为人数,m为出圈步长,s为起使报数位置(起始位置不一定要出圈)int Josephus ( int n, int m, int s ){ if ( m == 1 ) return ( s + n - 1 ) % n

2012-03-02 19:00:25 812

原创 POJ 3517 And Then There Was One 约瑟夫环

无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。  为了讨论方便,先把问题稍微改变一下,并不影响原意:  问题描述:n

2012-03-02 18:58:19 756

原创 POJ 1012 Joseph 约瑟夫-保证坏人先被清除

题意:同样的约瑟夫问题,只是现在有K个好人,K个坏人,确定一个步长,是的在第一个好人被清除之前所有坏人都被清除干净。题解:1.坏人被清除掉的先后顺序无关紧要,知道下一个除掉的是好人还是坏人就行了。2.由于好人一直都是k个,每除掉一个坏人,坏人数-1,所以队列的总数每次-1但是好人一直是前k个3.下一个被清除的人在队列中的“相对”序号为 s = (s+m-1)%rest4.只要s>

2012-03-02 18:52:29 4931 1

C++ STL 标准模板库

ACMer必备.内容非常详尽,不过是英文版的额。

2012-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除