
算法竞赛入门经典(第2版)
wwt9b15bs
这个作者很懒,什么都没留下…
展开
-
【题解】UVA11582 快速幂取模
题目链接 可以发现当有连续两项为1,1时整个序列开始重复。预处理出所有n的循环节,然后对于a^b快速幂取模得到对应下标#include<cstdio>#include<cstring>#include<vector>using namespace std;#define _rep(i,a,b) for(int i原创 2018-08-11 22:01:04 · 198 阅读 · 0 评论 -
【题解】UVA213[ACM/ICPC World Finals 1991].Message Decoding 模拟
题目链接 把编码理解成二进制,用(len,value)这个二元组来表示一个编码,其中len是编码长度,value是编码对应的十进制值.用code[len][value]保存这个编码所对应的字符。#include<cstdio>#include<cstring>int code[8][1<<8];inline int readchar()//跨行读...转载 2018-08-25 10:43:37 · 206 阅读 · 0 评论 -
【题解】UVA133 模拟
题目链接#include<cstdio>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=25;int que[N];int n,k,m;inline int cnt(int pos,int dir,int cnt){ while(cnt--) do{ pos=(p...原创 2018-08-25 10:43:28 · 251 阅读 · 0 评论 -
【题解】UVA489 模拟
题目链接#include<cstdio>#include<cstring>const int N=110;char s[N],s2[N];//答案是s,猜的是s2 int left,chance;//还需要猜left个位置,错chance次后就会输 int win,lose;//win==1赢lose==1输 void guess(char ch){ ...原创 2018-08-25 10:43:18 · 305 阅读 · 0 评论 -
【题解】UVA1647[ACM/ICPC SEERC 2005].Computer Transformations 递推
题目链接 参考了大佬博客思路摘抄如下: 数学题。我们观察变化。 00 -> 1010 出现 10、01 01 -> 1001 出现 10、00、01 10 -> 0110 出现 01、11、10 11 -> 0101 出现 01、10 只有01下一步会生成00,但是00、01、10、11都会生成01,每一个1都会生成01,而00也可以生成01, 由此分成两...原创 2018-08-22 07:51:39 · 237 阅读 · 0 评论 -
【题解】UVA1645(同hdu4472)[ACM/ICPC 2012 Asia Chengdu Regional Contest].Count 递推
题目链接 hdu uva n结点树,除去根结点,有n-1个结点,根结点的每棵子树需要完全相同,所以根结点的子树个数k,满足(n-1)%k==0。然后就可以递推打表了。#include<cstdio>const int N=1010;const int mod=1e9+7;int d[N];void Init(){ d[0]=0;d[1]=1; for(...原创 2018-08-22 07:51:35 · 239 阅读 · 0 评论 -
【题解】UVA11040 递推
题目链接 找规律题。通过观察易得到如下递推式:(a[i][j]表示第i层,第j个位置的砖的数字) (1) a[i+2][j+1]=(a[i][j]-a[i+2][j]-a[i+2][j+2])/2; (2) a[i+1][j]=a[i+2][j+1]+a[i+2][j]; (3) a[i+1][j+1]=a[i+2][j+1]+a[i+2][j+2];#include<cst...原创 2018-08-22 07:51:28 · 259 阅读 · 0 评论 -
【题解】UVA1638[ACM/ICPC Daejeon 2012].Pole Arrangement 递推
题目链接 设d[i][j][k]表示让高度为1~i的杆子排成一行,从左边能看到j根,从右边能看到k根的方案数 假设已经安排完高度为2~i的杆子,那么高度为1的杆子不管放到哪里都不会挡住任何一根杆子 假定i>=2 1.插到最左边,则从左边能看到它,从右边看不见 2.插到最右边,则从右边能看到它,从左边看不见 3.插到中间,都看不见 d[i][j][k]=d[i-1][[j-1][...原创 2018-08-22 07:50:54 · 183 阅读 · 0 评论 -
【题解】UVA12034 递推
题目链接 dp[i][j]表示i匹马j个排名 与前面的马同时到达+单独到达 dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%Mod*j%Mod; 还是可以预处理出来查表#include<cstdio>const int N=1e3+10;const int mod=10056;int dp[N][N],sum[N];void init()...原创 2018-08-22 07:50:43 · 224 阅读 · 0 评论 -
【题解】UVA580 递推
题目链接 大佬博客讲的很好,摘抄如下: 设f[i]为i个盒子的合法方案数,g[i]为i个盒子的非法方案数。 对于f[n],考虑第一次出现三个U连续的情况是在i,i+1,i+2,则i-1【如果存在】必须是L,之前不能出现三个U连续,之后随便选。总方案数为g[i-2]*2^(n-i-2)。 另外在特殊处理一下i-1不存在的情况,即i=1,此时的方案数为2^(n-3)。 综上所述,f[n...转载 2018-08-22 07:50:38 · 204 阅读 · 0 评论 -
【题解】UVA12230 数学期望
题目链接 首先如果全部步行则期望为D,现在每遇到一条河,求过河时间的期望,等待时间的区间为(0,2*L/v),船在每个地方都是等可能的,所以等待的期望就是(0 + 2*L/v) / 2 = L / v,又过河还要L / v,所以总的渡河期望值为2 * L / v,所以每遇到一条河拿D减去假设步行过河的期望L再加上实际过河期望2 * L / v即可#include<cstdio&gt...原创 2018-08-19 09:48:51 · 196 阅读 · 0 评论 -
【题解】UVA10976 枚举
题目链接 ∵x>=y∴1/x<=1/y->1/k-1/y<=1/y->y<=2k,所以在2k范围内枚举#include<cstdio>int main(){ int x,y,k; while(~scanf("%d",&k)) {原创 2018-08-19 09:49:44 · 150 阅读 · 0 评论 -
【题解】UVA11059 枚举
题目链接 连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过10^18,可以用long long 存储#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef l...原创 2018-08-19 09:49:40 · 247 阅读 · 0 评论 -
【题解】UVA725 枚举
题目链接 学习了大佬博客 只需枚举fghij就可以算出abcde,然后判断是否所有数字都不相同 注意sprintf、strcmp、sort的操作很巧妙#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int cmp(char a,char b){ ...转载 2018-08-19 09:49:36 · 404 阅读 · 0 评论 -
【题解】UVA10375 组合数+线性筛+唯一分解定理
题目链接 线性筛出10000以内素数表,求出唯一分解式中各个素数的指数#include<cstdio>#include<cstring>#include<cmath>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)#define _for(i,a,b) for(int i=(a);i&原创 2018-08-12 09:14:13 · 252 阅读 · 0 评论 -
【题解】UVA12169 扩展欧几里得
题目链接 参考了大佬题解思路摘抄如下: 因为(a*x1+b)%10001=x2 (a*x2+b)%10001=x3 x3 = (a * (a * x1 + b) % 10001 + b ) % 10001; x3 = (a * (a * x1 + b) + b) % 10001; 所以 x3 + 10001 * k = a * a * x1 + (a + 1) * b; x...原创 2018-08-11 23:22:02 · 166 阅读 · 0 评论 -
【题解】UVA512[ACM/ICPC World Finals 1997].Spreadsheet Tracking 模拟
题目链接 一种做法是模拟表格的操作#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)#define _for(i,a,b) for(int i=(a);i转载 2018-08-26 22:36:11 · 327 阅读 · 0 评论