
poj
文章平均质量分 51
kangwq2017
这个作者很懒,什么都没留下…
展开
-
扩展欧几里得算法
已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式ax + by = \gcd(a, b).。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。基本算法:对于不完全为 0 的非负整数 a,b,g原创 2016-01-25 22:51:29 · 595 阅读 · 0 评论 -
欧几里得算法
问题:求整数a和b的最大公约数算法:欧几里得算法(又称辗转相除法),gcd(a,b) = gcd(a,a%b)证明:假设 a = b*q + r,p是a和b的一个公约数,那么==> a = p*m==> b = p*n==> p*m = p*n*q +r==> r = p*m - p*n*q = p(m - n*q)==> p也是r的公原创 2016-01-24 23:40:43 · 653 阅读 · 0 评论 -
线性表--顺序实现
/*线性表:顺序实现 */#include #include using namespace std;#define MaxSize 1000 // 宏定义 int A[MaxSize];int n;// 在loc位置插入元素item void InsertList(int &n, int loc, int item){ if (n == MaxSize) {原创 2016-05-16 23:26:24 · 322 阅读 · 0 评论 -
0-1背包:使用滚动数组时为何要逆序枚举
0-1背包:使用滚动数组时为何要逆序枚举原创 2016-02-23 22:12:55 · 3612 阅读 · 8 评论 -
poj3069 贪心
题意:直线上有n个点,点i的位置是Xi。从这n个点中选择若干个,给它们加上标记。对每一个点,其距离为R以内的区域里必须有带标记的点(本身为带有标记的点,可以认为与其距离为0的地方有一个带有标记的点)。在满足这个条件的情况下,希望能为尽可能少的点添加标记。求最少要有多少个点被加上标记。算法:贪心。首先把输入的Xi进行升序排序,从最左侧的点0开始,向右找出最远的一个点j,使得点j加标记后能原创 2016-04-08 22:46:40 · 1115 阅读 · 0 评论 -
poj1032 数论
题意:议会由N个代表组成。代表被分到不同的组中,任意两个组的人数不能相等,任意一个代表只能在一个组中。每天每个组只能派一名代表去开会,每天参加会议的代表不能重复,只有这样议会才能正常工作。求如何分组使得议会正常工作的时间最长。算法:数论。假设 N = A1+A2+...+An,那么议会正常工作的时间为A1*A2*...*An,所求即为 A1*A2*...*An的最大值。对任意一原创 2016-03-15 15:24:06 · 1417 阅读 · 0 评论 -
poj3617 贪心
题意:给定长度为N的字符串S,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作: 从S的头部删除一个字符,加到T的尾部从S的尾部删除一个字符,加到T的尾部目标是使T字典序最小,输出时每行最多80个字符。算法:贪心。每次选择S头部或尾部最小的字符,如果两者相同,继续比较下一个字符,直到找到较小的字符。#include using nam原创 2016-04-07 21:42:44 · 790 阅读 · 0 评论 -
poj1036 dp
题意:N个歹徒去一个餐馆,餐馆门有k个打开程度(每个打开程度为门的一个状态),每个歹徒拥有各自的肥胖度和繁荣度(prosperity),歹徒在i 时刻到达餐馆,若此时刻门的打开程度与歹徒的肥胖度完全相同,则歹徒就进入餐馆,同时餐馆获得这个歹徒相应的繁荣度,若歹徒到来时门的打开程度与歹徒的肥胖程度不同,则歹徒离开且不再回来。门的打开程度在每个单位时间里可以加1、减1或不变。要求:通过控制门的打开原创 2016-03-25 12:24:36 · 857 阅读 · 0 评论 -
poj1029 模拟/枚举
题意:输入N个硬币,其中有且仅有一枚是假币,通过K次称重,求出哪个是假币,如果无法求出,输出0.算法1:模拟首先,对于假币,假设比真币重,那么不管如何组合,有假币的一侧一定重,而如果某枚硬币所在的结果有时重有时轻,则它一定是真币。例,假设有4枚硬币,其中第2枚为假币,且比真币重,那么:1 => 此时结果:硬币1轻,硬币2重,说明二者一定有一枚是假币1+2 > 3+4原创 2016-03-13 12:15:27 · 495 阅读 · 0 评论 -
poj1064 二分搜索
题意:有N条绳子,它们的长度分别为Li。如果从它们中切割出K条长度相同的绳子,试问这K条绳子最长为多长?算法:枚举+二分搜索 #include #include using namespace std;int N, K;double d[10001];bool check(double x){ int num = 0; for (int i=0; i<原创 2016-05-09 22:33:39 · 2275 阅读 · 0 评论 -
poj1046 枚举
题意:给定16个点作为目标点,然后任给出一点p,根据距离公式,计算距点p最近的目标点。算法:枚举 #include using namespace std;int r,g,b;int target[16][3];int main(){ double d, ans; int key; for (int i=0; i<16; i++) { cin >> tar原创 2016-04-19 14:48:20 · 771 阅读 · 0 评论 -
poj 备忘录
1.排序1.1 结构体排序struct GANGSTER{ int t; int p; int s;};GANGSTER gangsters[101];bool cmp(const GANGSTER &a, const GANGSTER &b){ return a.t < b.t;}sort(gangsters,gangsters+N,cmp);原创 2016-03-25 12:28:36 · 317 阅读 · 0 评论 -
poj1054 模拟
题意:在一个R*C的矩阵里,留了n个青蛙的脚印。已知每只青蛙的步长是一定的,且都是从一个边界外,跳到了另一边的边界外,而且跳的是直线,每跳一次留下一个脚印。现在求留下最多脚印的那只青蛙留下了多少脚印。也就是求哪条直线上的点最多,注意,如果少于3个点,输出0。算法:模拟。两点确定一条直线,枚举任意的两个点,计算所确定直线上被青蛙破坏的点。#include #includ原创 2016-05-03 22:28:44 · 516 阅读 · 0 评论 -
poj1053 模拟
题目大意:有一种牌,共有81张。每张牌有四个属性,每种属性有三种可能取值:形状(D,O,S),数字(1,2,3),颜色(R,G,P),纹理(O,F,S)。如果三张牌的的任意一种属性都满足:三张牌的该属性值均相同或各不相同,则成这三张牌可以构成一个set。给出12张牌的所有属性值,求该组牌中是所有set。例如:S3GS D2GS O1GS 构成一组set,因为第1属性均不同,第2属性均不同,第3原创 2016-05-03 22:38:40 · 614 阅读 · 0 评论 -
poj1047 数论
题意:输入一个数(该整数的长度为2~60),判断该数是否是循环数。设该整数的长度为n,所谓循环数,是指该数分别乘以1~n,得到的数发生循环。 算法:循环数规律,若某数a是循环数, 则a*(n+1)所得的结果全是9 #include #include using namespace std;char str[100];int main(){ while (cin >>原创 2016-04-20 22:02:53 · 504 阅读 · 0 评论 -
poj1050 动态规划
题意:给定N*N的矩阵,求最大子矩阵和算法:动态规划。枚举子矩阵a[i,j],表示从第i行到第j行组成的矩阵,将其每列相加,即可转换为求一维数组的最大连续子段和问题。设dp[k]表示以元素k结束的最大子段和,那么,dp[k]=max{dp[k-1]+a[k],a[k]}#include #include using namespace std;const int S原创 2016-04-23 11:13:35 · 716 阅读 · 1 评论 -
poj1051 模拟
题意:输入字符串,转换为morse码,求将该morse码对应的数字串反转后所对应的morse码。例如:AKADTOF_IBOETATUK_IJN先转为morse码 .--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242将数字翻转为242433121136266313232,此时morse码为原创 2016-04-23 17:07:48 · 321 阅读 · 0 评论 -
poj1028 模拟
题意:模拟浏览器操作。BACK:当前页面进入forward栈,backward栈出栈,如果backward栈为空,命令被忽略。FORWARD:当前页面进入backward栈,forward栈出栈,如果forward栈为空,命令被忽略。VISIT:当前页面进入backward栈,该元素为当前页面,清空forward栈。QUIT:退出浏览器。 算法:模拟 #incl原创 2016-03-12 12:39:43 · 488 阅读 · 0 评论 -
poj1027 模拟
题意:在一个固定大小为10x15的矩形区域A内被RGB三种颜色的小球填满,每次可以选择同种颜色(上下左右)连通小球数>=2的区域进行删除,删除后,上方的小球会下落,如果有空列,将其右边的列进行整列左移,移动后小球的相对顺序不变。设m(m>=2)为删除个数,每次的得分为(m-2)*(m-2),如果最后所有的小球全部能够删除,奖励1000分。当区域A没有剩余小球或是最大连通区域的小球个数为1时原创 2016-03-11 22:22:17 · 491 阅读 · 0 评论 -
poj1218 模拟/数论
题意:监狱里有n扇门,从1到n,每次把序号倍数的门,如果开着,关上,如果关着,打开。求最后有多少个门是打开的。 /*算法:模拟*/#include using namespace std;int main(){ int n,m; cin >> m; for (int i=0; i<m; i++) { cin >> n; // for each pri原创 2016-02-26 22:42:44 · 678 阅读 · 0 评论 -
poj1007 逆序数
逆序数原创 2016-01-26 16:46:12 · 514 阅读 · 0 评论 -
poj1006 扩展欧几里得算法+中国剩余定理
题意:physical、emotional和intellectual的周期分别为23、28和33天。现给出三个日期,p、e和i,分别对应physical、emotional和intellectual出现 峰值的日期。然后再给出一个日期d,求从d开始,经过多少天三个峰值会同时出现。 难度:*** 算法:扩展欧几里得算法+中国剩余定理 1.假设需要的天数为days,那么根据题意原创 2016-01-25 22:53:17 · 550 阅读 · 0 评论 -
poj1018 动态规划
题意:一套通讯系统由一些设备组成,每种设备由不同的供应商供应,每个供应商供应的同种设备有各自的带宽(bandwidth)和价格(prices)。通讯系统的带宽(B)指的是组成该系统的所有设备的带宽的最小值,通讯系统的价格(P)指的是组成该系统的所有设备的价格之和。求最大的 (B / P)。算法:动态规划,由前i-1个供应商得到前i个供应商的情况 定义 dp[i][j]=k 为前i个原创 2016-03-02 22:55:55 · 1070 阅读 · 0 评论 -
poj1020 dfs
题意:有一个大小为s*s的蛋糕,现给出n(1 算法:dfs,从上到下,从左到右,从大蛋糕到小蛋糕依次尝试/枚举 最简单的思路是先按蛋糕的尺寸逆序排序小蛋糕,然后枚举每个小蛋糕,但是TLE。原因很简单,假如第i次尝试的是j个蛋糕,如果失败了,会尝试第j+1个蛋糕,但是假如第j+1个蛋糕的尺寸和第j个蛋糕的尺寸相同,同样会失败,此处需要剪枝。后来,按照蛋糕的尺寸从大到小进行枚举,如果尺原创 2016-03-05 22:02:51 · 527 阅读 · 0 评论 -
poj1010 dfs/枚举
poj1010 dfs/枚举原创 2016-02-19 23:38:06 · 453 阅读 · 0 评论 -
poj1014 dfs/背包/类筛法求素数
poj1014 dfs/背包/类筛法求素数原创 2016-02-18 12:21:41 · 476 阅读 · 0 评论 -
poj1256 dfs(全排列)
题意:给定字符串(长度最大为13),字母可能有重复,要求按升序输入其所有的全排列,注意,字母的大小顺序为A算法:1.dfs 2.STL/*算法:dfs */#include #include #include using namespace std;char c[20]; // 存储输入的字符串 char ans[20]; // 存放结果原创 2016-03-06 18:19:40 · 655 阅读 · 0 评论 -
poj1016 模拟
题意:对数字进行压缩,如1111111和21221314,分别可以压缩为71和31321314。对给定的一数字n,如果压缩前后相等,如22,输出n is self-inventorying,如果经过j次压缩后值不再变化,输出n is self-inventorying after j steps,如果形成循环,输出n enters an inventory loop of length k,如果经原创 2016-02-27 23:43:55 · 371 阅读 · 0 评论 -
poj1017 模拟
poj1017 模拟原创 2016-02-21 22:39:28 · 672 阅读 · 0 评论 -
poj1013 模拟
poj1013 模拟原创 2016-02-04 15:54:25 · 449 阅读 · 0 评论 -
poj1008 模拟
poj1008 模拟原创 2016-01-28 16:41:43 · 426 阅读 · 0 评论 -
poj1033 模拟(dfs)
题意:磁盘有n个块,有m个文件,每个文件被分割为多个块分散在磁盘中,现进行磁盘整理,要求使用最少的移动次数,使得第1个文件占用1,2,3..f1个块,第2个文件占用f1+1,f1+2...f1+f2个块。 算法:模拟,使用dfs实现 #include #include using namespace std;int move[10010]; // move[i原创 2016-03-20 10:55:01 · 444 阅读 · 0 评论 -
poj1035 模拟
题意:输入一部字典,然后输入若干单词,1.若该单词在字典中能查到,则输出correct2.若该单词通过替换、删除、添加一个字符后,可以在字典中查到,输出字典中单词3.不符合1、2者,输出空算法:模拟#include #include using namespace std;const int SIZE=10010;char dict[SIZE][20]原创 2016-03-20 12:16:21 · 295 阅读 · 0 评论 -
poj1852 想象力!
题意:有n只蚂蚁都在长度为L(cm)的杆子上爬行,它们的速度都是1cm/s,到了杆子终端的时候,蚂蚁就会掉下去。如果在爬行途中遇到其它蚂蚁,两只蚂蚁的方向都会调转。已知蚂蚁在棒子的最初位置坐标,但是我们不知道它们的初始方向。求出所有蚂蚁掉下去的最短时间和最长时间。 算法:1.暴搜,枚举n只蚂蚁所有的初始方向并计算掉下去的时间,但是,n只蚂蚁的方向有2^n种,对于较大的n,肯定会超时原创 2016-03-21 20:56:02 · 413 阅读 · 0 评论 -
poj1026 模拟
题意:首先输入一个大小为n的整数数组,该数组元素彼此不重复,个人称之为变换数组(因数组从0开始,为了与数组进行对应,请将实际数值减一)。 然后输入一个整数k和一个字符串,k为变换的次数,字符串的长度如果小于变换数组的长度n,用空格补齐。现求经过k次变换后的字符串的结果。样例说明:104 5 3 7 2 8 1 6 10 91 Hello Bob变换数组:4 5 3原创 2016-03-08 15:27:20 · 403 阅读 · 0 评论 -
poj1009
poj1009原创 2016-01-31 19:54:25 · 566 阅读 · 0 评论