- 博客(28)
- 收藏
- 关注
原创 二分 三分 总结
整数二分根据不同情况划分为两种1. 在单调递增序列a中查找≥x的数中的最小的一个(即x或x的后继);while (l < r) { int mid = l + r >> 1; if (a[i] >= x) r = mid; else l = mid + 1; } return a[l];2.在单调...
2019-04-20 18:00:57
137
原创 1018 锤子剪刀布
#include <iostream>#include <algorithm>using namespace std;int n,a1,b1,c1,a2,c2,b2;int d1[4],d2[4];int pd(char a,char b){ // cout << d2[2]<<endl; if(a==b) return...
2019-04-19 11:24:34
198
原创 求A^B的所有约数之和mod一个数X (POJ 1845) 约数之和
根据唯一分解定理可以把A分解为质因数,表示为p1^c1 * p2^c2 * p3^c3 ...... * pn^cn那么A^B表示为p1^(B*c1) * p2^(B*c2)* p3^(B*c3) ...... * pn^(B*cn)A^B的所有约数表示为{p1^k1 * p2^k2 * ... * pn^kn 其中0<= ki <= B * ci (1 <= i &...
2019-04-16 14:45:00
723
原创 算法竞赛进阶指南 第一章基本算法 第一节 位运算 总结
& 与 两者都为1则为1,有一个不为1则为0| 或 有一个为1则为1,都为0则为0! 非 取反 0对应1,false对应true (逻辑取反)~ 非 按位取反,0变为1,1变为0^ 异或 两者相同为0,不同为1...
2019-03-14 09:14:08
331
原创 POJ 2386 Lake Counting
题目就是让求有有多少的连在一起的 W。dfs每碰见一个 就把它就把它相连的都变成 .代码:#include<iostream>using namespace std;int n,m;char a[110][110];int ans;const int dx[10]={0,-1,-1,-1,0,0,1,1,1},dy[10]={0,-1,0,1,-1,1,-...
2019-03-05 15:54:51
109
原创 蓝桥杯 算法提高 上帝造题五分钟
使用RMQ可以进行O(1)复杂度的查询#include<bits/stdc++.h>using namespace std;int n,q;int a[2000];const int MAXN = 50010; int dp[MAXN][20]; int mm[MAXN]; //初始化 RMQ, b 数组下标从 1 开始,从 0 开始简单修改void init...
2019-03-04 22:46:49
188
原创 蓝桥杯 算法提高 队列操作
直接使用STL代码:#include<bits/stdc++.h>using namespace std;int n,x;queue<int> q;int main(){ cin>>n; while(n--) { cin>>x; if(x==1) { cin>>x; q.push(x...
2019-03-04 22:22:35
198
原创 蓝桥杯 算法训练 未名边的烦恼
代码:#include<iostream>using namespace std;int fun(int m,int n){ return m<n?0:n==0?1:fun(m-1,n)+fun(m,n-1);}int main() { int n,m; cin>>m>>n; cout<<fun(m,n)&l...
2019-03-04 21:28:15
127
原创 蓝桥杯 算法训练 最短路
可以使用SPFA算法,直接套模板就能过这里提供一下模板#include<bits/stdc++.h>using namespace std;const int N=100010,M=1000010;int head[N],ver[M],edge[M],Next[M],d[N];int n,m,tot;queue<int> q;bool v[N];...
2019-03-03 15:05:40
248
原创 CH2501 矩阵距离
参考算法竟赛进阶指南——李煜东本题可以看做一道有多个起始点的flood-fill问题,把第一个矩阵中的每个1都看作是一个起始点,整个矩阵都可以通行,对于每个位置,在从任何一个起点出发都可以到达的情况下,求到达该位置的最小步数(即距离该位置最近的起点的距离)在这样的问题中,可以在bfs开始之前把所有起始点放进队列,再根据bfs逐层搜索的性质,会从起点不断扩展1层,两层。。。知道遍历...
2019-03-03 14:00:49
195
原创 POJ 2248 Addition Chains 迭代加深
题意很好懂,给一个数n,找到一个序列 ,最后一个数的值为n,第一个数的值为1,序列递增且相邻的数都不相等,对于每个k k∈2~m,都存在两个在1~k-1范围内的i,j(i,j可以相等) 使得x【k】=x【i】+x【j】 使序列的长度m尽可能短,可确定答案在比较小的范围内,所以采用迭代加深的方法,在搜索深度为一个定值的情况下找不到,那么就将深度+1,再次进行搜索。代码:#...
2019-03-03 11:09:05
199
原创 PAT 1004 成绩排名 (20 分)
通过了居然是红色的字体,真有点不习惯,按题意就行了#include<iostream>#include<algorithm>using namespace std;struct Student{ char name[20]; char xuehao[20]; int score;}; struct Student s[100];int n;...
2019-03-02 20:20:53
200
原创 CH2401 送礼物 双向搜索
双向搜索可以避免在深层子树上浪费时间。在一些题目中,问题不但具有初态,还具有明确的终态,,并且从初态开始搜索与从终态开始逆向搜索的搜索树都能覆盖整个状态空间。在这种情况下就可以采用双向搜索——从初态和终态出发各搜索一半状态,产生两棵深度减半的搜索树,在中间交汇组合成最终的答案如果直接进行指数型的枚举 则复杂度过高所以要用双向搜索,先从前一半礼物中选出若干个,可能达到的值都放进一个数组A中,...
2019-03-02 19:00:12
254
原创 POJ 1101 STICKS
题意:给出n个切过的木棒,让你把把这些木棒拼成s根相同的木棒,而且木棒的长度要尽可能短代码参考了 算法竞赛进阶指南——李煜东详见代码:#include<iostream>#include<cstring>#include<algorithm>using namespace std;int n,a[100],v[100],sum,val,...
2019-03-02 10:31:12
137
原创 poj1190 深搜+剪枝
参考:算法竞赛进阶指南–李煜东搜索框架:从下往上搜索,分支则为每层的半径和高度搜索面对的状态为:正在搜索蛋糕的第n层,当前外表面面积s,当前体积v,第n+1层的高度和半径。可以创建数组h和r分别记录每层的高度和半径整个蛋糕的上表面相加之和即为下表面面积,可以在第m层直接累加到s中,这样在第m-1层往上的搜索中只用计算表面积即可,减少了计算步骤;剪枝可以分为5个方面:1.上下界剪枝在...
2019-02-28 13:41:37
322
原创 使用数组模拟链表
#include<bits/stdc++.h>using namespace std;const int SIZE=100;int q; struct Node{ int value; int prev ,next;}node[SIZE];int head,tail,tot;int initialize()//初始化链表 { tot = 2; head = 1,...
2019-02-27 16:15:48
563
原创 实现链表 算法竞赛进阶指南
#include<bits/stdc++.h>using namespace std;struct Node{ int value; Node *prev,*next;}; Node * head ,*tail, *q;void initialize()//建新链表 { head = new Node(); tail = new Node(); head -&...
2019-02-27 15:37:30
345
原创 Codeforces Round #541 (Div. 2) A Sea Battle
找规律#include<bits/stdc++.h>using namespace std;int a,b,c,d;int main(){ cin>>a>>b>>c>>d; long long ans=0; ans=(a+b+d)*2+4; cout<<ans<<endl; } ...
2019-02-23 19:24:49
95
原创 dijkstra 挑战程序设计模板 O(|E|log|V|)
#include<bits/stdc++.h>using namespace std;const int MAX_V=10000;const int inf=0x3f3f3f3f;struct edge{ int to,cost;}; typedef pair<int ,int > P; int V;vector<edge> G[MAX_V...
2019-02-10 17:29:59
387
原创 POJ 3258 River Hopscotch
本题与poj2456非常相似,只需更改几个条件使用二分搜索加快速度poj 2456:https://blog.csdn.net/qq_43768149/article/details/86754555#include <cstdio>#include <iostream>#include <vector>#include <cstring>...
2019-02-03 12:54:14
84
原创 POJ 2456 Agressive cows
#include<iostream>#include<algorithm>using namespace std;int n,m,str[100005];bool C(int d){ int last=0;//初始化数组第一个牛棚下标 for(int i=1;i<m;i++) { int crt=last+1;//初始化第二个合法牛棚 wh...
2019-02-02 22:03:22
143
原创 多重集组合数
有n种物品,第i个物品有ai个。不同种类的物品可以互相区分但相同种类的无法区分。从这些物品中取出m个的话,有多少种取法?求出方案数模M的余数,参考挑战程序设计p68~69int n,m;const int N=10000;int a[N];int dp[N][N];void solve (){ for(int i=0;i<=n;i++)//一个都不取的方法只有一种 {...
2019-02-02 17:45:38
154
原创 POJ 1742 coins
#include<iostream>#include<cstring>using namespace std;int str[105],str2[105]; int n,m;int f[100005],use[100005];int main(){ while(cin>>n>>m&&(n+m)) { for(i...
2019-02-02 14:31:41
81
原创 POJ 3280 Cheapest Palindrome
#include<iostream>#include<cmath>#include<algorithm>#include<cstdio>#include<string>#include<cstring>using namespace std;int c[2000];long long str[2500][2...
2019-02-02 10:33:33
173
1
原创 POJ 3616 Milking Time
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int dp[1010]={0};struct st{//定义结构体 int s,e,v;//开始 结束 生产值 }cow[1010]; bool cmp(st a,st b)//从定义排序 { ...
2019-02-01 21:16:32
90
翻译 POJ 2385 Apple Catching
#include &lt;cstdio&gt;#include &lt;algorithm&gt;using namespace std; const int maxn = 1111; int a[maxn], dp[maxn][40]; int main() { int t, w; while(~scanf("%d%d", &amp;t,
2019-02-01 18:02:46
95
原创 Codeforces Round #531 (Div. 3) D - Balanced Ternary String
从前往后把0换够n/3;把1换够n/3;从后往前换2;`#include &lt;bits/stdc++.h&gt;#define fi first#define se second#define ll long longconst int N = 300300;const long long mod = 1e9 + 7;using namespace std;int n;int...
2019-01-10 16:33:25
124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人