ACM算法
酷酷的鱼1
这个作者很懒,什么都没留下…
展开
-
Mysql学习总结
表:具有固定列数和任意行数。数据库:一些关联表的集合。主键:一个数据表只能包含一个主键,使用主键来查询数据。外键:用来关联两张表。索引:快速访问数据库表的特定信息,索引是对数据库表一列和多列的值进行排序的一种数据结构。DDL:数据定义语言:定义数据库对象:创建库,表,列等。DML:数据操作语言:用来操作数据库表中的记录。DQL:数据查询语言:用来查询数据。DCL:数据控制语言:用...原创 2018-10-15 08:17:00 · 19 阅读 · 0 评论 -
分苹果-动态规划
#include<cstdio>int solve(int m, int n){ if(m==0 || n==1) return 1; if(n>m) return solve(m, m); else return solve(m, n-1)+solve(m-n, n); }int main(){ int m, n; while(scanf("%d%...原创 2018-10-14 16:14:00 · 36 阅读 · 0 评论 -
链表反转
输入一个链表,反转链表后,输出新链表的表头/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*/ListNode* ReverseList(ListNode* pHead){ if(pHead==NULL || pHead->next==...原创 2018-10-25 20:35:00 · 17 阅读 · 0 评论 -
动态规划-石子合并圆形
#include<cstdio>#include<algorithm>using namespace std;const int INF=1<<30;int maxx[300][300];int minn[300][300];int sum[300];int box[105];int main(){ int n; scan...原创 2018-11-12 19:50:00 · 21 阅读 · 0 评论 -
E. Thematic Contests 二分,离散化
题目意思是给你n个问题即数字,n的大小代表问题所在的话题,题目要求举办多场比赛,每场比赛的只能一种问题,且后一场比赛的问题必须是前一场的两倍,求举办比赛可能最多的问题总数传送门解题思路:将出现每种数字对应的话题从一开始标记,用a记录对饮数字出现的次数,排序后,枚举第一场可能的问题次数,之后二分查找后面是否存在问题的二倍数量存在就加上,直到不足二倍。#include<bits/std...原创 2018-11-18 20:03:00 · 17 阅读 · 0 评论 -
动态规划-最长上升子序列(LIS)
时间复杂度为〇(nlogn)的算法,下面就来看看。我们再举一个例子:有以下序列A[]=3 1 2 6 4 5 10 7,求LIS长度。我们定义一个B[i]来储存可能的排序序列,len为LIS长度。我们依次把A[i]有序地放进B[i]里。(为了方便,i的范围就从1~n表示第i个数)A[1]=3,把3放进B[1],此时B[1]=3,此时len=1,最小末尾是3A[2]=1,因为1比3小,所以...原创 2018-11-04 20:09:00 · 44 阅读 · 0 评论 -
D. Cutting Out 二分
题意是给你n个数字的序列,让你从中找含k个数字的序列,要求这k个数字要尽可能多次的从n个数字的序列中减去。解法就是从1到n,二分查找可以删除的最大次数。http://codeforces.com/contest/1077/problem/D#include<bits/stdc++.h>using namespace std;const int maxn=2e5+10;i...原创 2018-11-18 17:05:00 · 19 阅读 · 0 评论 -
神秘钥匙-快速幂题
#include<cstdio>long long PowerMod (long long a, int b, int c) { int ans = 1; a = a % c; while(b>0) { if(b % 2 == 1) ans = (ans * a)...原创 2018-10-22 08:13:00 · 22 阅读 · 0 评论 -
字符串预处理
用nextz[x][y]表示下标为x的字符后面第一次出现y的位置s为字符串,存储的字符从下标1开始void init(){ for(int i='a';i<='z';i++) { for(int j=n;j>=1;j--) { nextz[j-1][i-'a']=nextz[j][i-'a']; ...原创 2018-11-13 10:05:00 · 23 阅读 · 0 评论 -
回溯法,判断字符串后缀
题意为给你一个n,k让你输出由前k个字母组成的第n个困难字符串,困难字符串就是没有任何两个相邻的字串完全相同,例如BB,ABCDABCD不是,而A AB ABA ABAC ABACA ABACAB ABACABA为困难的串例如当n=7,k=3时输出ABACABA。解决这个问题就是要避免重复的判断,当已经判断好长度为len的字符串为困难字符串时,再判断长度为len+1的字符串时只需要比较len...原创 2018-11-23 16:48:00 · 20 阅读 · 0 评论 -
灰色预测模型
灰色预测模型是通过少量的、不完全的信息,建立数学模型并作出预测的一种预测方法。灰色系统理论是研究解决灰色系统分析、建模、预测、决策和控制的理论。灰色预测是对灰色系统所做的预测。目前常用的一些预测方法(如回归分析等),需要较大的样本,若样本较小,常造成较大误差,使预测目标失效。灰色预测模型所需建模信息少,运算方便,建模精度高,是处理小样本预测问题的有效工具。灰色系统是黑箱概念的一种推广,我们...原创 2019-01-08 22:27:00 · 19 阅读 · 0 评论 -
01背包
#include<cstdio>#include<algorithm>using namespace std;int w[105], v[105];int dp[105][1005];int main(){ int m, n; scanf("%d%d", &m, &n); for(int i=1; i<=n; ...原创 2018-11-01 20:57:00 · 20 阅读 · 0 评论 -
二进制生成最小子集
#include<bits/stdc++.h>using namespace std;int main(){ int n; scanf("%d", &n); for(int i=1; i<(1<<n); i++) { for(int j=0; j<=n; j++) { ...原创 2018-11-22 15:49:00 · 17 阅读 · 0 评论 -
动态规划-导弹拦截(求最长不上升子序列和最长上升子序列)
lower_bound(a,a+n,i)函数 返回从数组a到a+n中第一个>=i的元素地址upper_bound(a,a+n,i)函数 返回从数组a到a+n中第一个>i的元素地址#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const ...原创 2018-11-05 07:48:00 · 18 阅读 · 0 评论 -
拓扑排序
#include<bits/stdc++.h>using namespace std;int e[10][10];int c[10];stack<int> s;int n,m;bool dfs(int u){ c[u]=-1; for(int v=1; v<=n; v++) { if(e[u][v]==1) ...原创 2018-11-22 15:58:00 · 16 阅读 · 0 评论 -
疯狂采药-动态规划(完全背包)
#include<bits/stdc++.h>using namespace std;int dp[10005][100005]; // 炸内存。。int w[10005],v[10005];int main(){ int n,m; scanf("%d%d", &m,&n); for(int i=1; i<=n; i++)...原创 2018-11-01 21:21:00 · 21 阅读 · 0 评论 -
C. Playing Piano 动态规划
题目意思是给你一个n长度的数字串为a,让你构造一个n长度的数字串b值都为1-5满足以下条件:正常的dfs暴力构造会超时,我试过了。。可以开一个二维数组dp[i][j]用来表示b的第i个数字为j是否可行,标记为1或0;因为第i个数字的大小只会影响第i+1个数字,每次确定i都根据第i-1的数字来判断。再开一个二维数组pre[i][j]用来表示b的第i个 数字为j时的前一个数字是多少,最后倒...原创 2018-11-22 08:49:00 · 39 阅读 · 0 评论 -
多属性决策
多属性决策是现代决策科学的一个重要组成部分,它的理论方法在工程设计、经济、管理和军事等领域有着广泛应用,如:投资决策、项目评估、维修服务、武器系统性能评定、工厂选址等实质:利用已有的决策信息通过一定的方式对一组或有限个备选方案进行排序和择优。主要由两部分组成:获取决策信息(决策信息一般包括两个方面的内容:属性权重(属性权重的确定是多属性决策种的一个重要研究内容)和属性值(属性值主要有三种...原创 2019-01-08 18:28:00 · 37 阅读 · 0 评论 -
层次分析法
作用:用于解决生活中,学习中等遇到的决策问题,决策就是指在面临多种选择方案时,依照一定的标准选择某一种方案。例如:在苏杭、北戴河、桂林选择一个旅游点。要考虑到景点的景色、居住的环境、饮食的特色、交通的便利和旅游的费用。层次分析法原理:层次分析法根据问题的性质和要达到的总目标,讲问题分解为不同的组成因素,并按照因素间的相互关联的影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析...原创 2019-01-07 17:54:00 · 16 阅读 · 0 评论 -
a^b%p and a*b%p快速幂
#include<cstdio>int power(int a, int b, int p){ int ans=1%p; for(;b;b>>=1) { if(b&1) ans=(long long)ans*a%p; a=(long long)a*a%p; } return ans;...原创 2018-11-28 20:49:00 · 23 阅读 · 0 评论 -
DP-01背包
题目传送门题目类似01背包,但存在一个选取先后不同价值会有损耗,所有对物品按易损耗的程度从大到小排个序来顺序选取。#include<bits/stdc++.h>using namespace std;#define LL long longconst LL maxn=1e5+10;struct note{ LL a,b,c;} w[maxn];LL f[m...原创 2019-04-15 20:54:00 · 19 阅读 · 0 评论 -
icpc2018焦作-I. Distance
第一发又超时了。。。题目大意:给你n个点,然后给你n-1的数,表示两两距离,然后让你输出n个答案,第i个答案表示从这n个点里面挑i个点,然后这i个点两两之间会有一个距离,答案要求这些距离和的最大值。第一次思路:n个点,给你距离,我们可以得到在坐标轴上表示n个点的坐标,然后我们可以先设每个点坐标为xi可以发现:当n>=2的时候n=2,i=2 距离为x2-x1n=3,i=2距离为x3...原创 2019-04-13 15:56:00 · 18 阅读 · 0 评论 -
多重背包
n个物品,每个可以取k次,容量为w,价值为v。一般做法:二进制拆分:将每个物品拆成O(log k)个01背包的物品,时间复杂度为(nmlogk)例如:K=10 可以拆分成1 2 4 再加一个余数2...原创 2019-03-26 22:14:00 · 19 阅读 · 0 评论 -
C++中的auto的使用
需要改变迭代对象 for(auto &i:s)string s = "hello";for (auto &i : s ) i = toupper(i); //改变成大写,影响s的值cout<<s<<endl; //s的值是 HELLO不需要改变迭代对象 for(auto i:s)string s = "hello";for (a...原创 2019-03-09 19:06:00 · 23 阅读 · 0 评论 -
二进制中一的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int flag=1; int cnt=0; while(flag) { if((n&flag)!=0) ...原创 2019-03-23 13:12:00 · 21 阅读 · 0 评论 -
set
#include<bits/stdc++.h>using namespace std;set<double> s;int main(){ s.insert(3.14); s.insert(3.158); for(set<double>::iterator it=s.begin(); it!=s.end(); it++) ...原创 2019-03-09 15:03:00 · 18 阅读 · 0 评论 -
模拟退火模型
什么是退火:退火是指将固体加热到足够高的温度,使分子呈随机排列状态,然后降温使之冷却,最后分子以低能状态排列,固体达到某种稳定状态。物理退火过程加温过程——增强粒子的热运动,消除系统原先可能存在的非均匀态。等温过程——对于与环境换热而温度不变的封闭系统,系统状态的自发变化总是朝自由能减少的方向进行,当自由能达到最小时,系统达到平衡态。冷却过程——使粒子热运动减弱并趋于有序,系统能...原创 2019-01-10 11:50:00 · 77 阅读 · 0 评论 -
高精度计算
高精度加法#include<bits/stdc++.h>using namespace std;int x[1000005];int main(){ string a,b; cin>>a>>b; if(a.size()<b.size()) swap(a,b); for(int i=1; i&l...原创 2019-03-16 15:05:00 · 17 阅读 · 0 评论 -
错误票据
stringstream可以吞下不同类型,然后吐出接收对象对应的类型#include<bits/stdc++.h>using namespace std;int x[100005];int book[100005];int main(){ int n; scanf("%d", &n); getchar(); string a[1...原创 2019-03-17 15:34:00 · 22 阅读 · 0 评论 -
匈牙利算法-二分图最大匹配问题
https://www.luogu.org/problemnew/show/P3386#include<cstdio>int e[1005][1005],match[1005],book[1005]; // match数组用来记录配对关系 int n,m,t;int dfs(int u){ for(int v=1; v<=m; v++) { ...原创 2019-03-13 12:20:00 · 21 阅读 · 0 评论 -
动态规划-合唱队形
做法:依次从1到n枚举每个点,计算以每个点作为中心也就是最高点,从左走找最长下降序列,从右边找最长下降序列,求和,找一个和的最大值-1就是最多安排的人数,n-这个最大值就是答案。#include<bits/stdc++.h>using namespace std;int a[105];int d[105];int main(){ int n; ci...原创 2019-04-16 22:14:00 · 28 阅读 · 0 评论 -
“扩展域”与"边带权"的并查集
https://www.luogu.org/problemnew/show/P1196银河英雄传说#include<bits/stdc++.h>using namespace std;const int maxn=30005;int f[maxn],d[maxn],s[maxn]; // f[i]用来记录i节点的根 d[i]记录i所在集合的前面有几个节点 s[i]记录s...原创 2019-03-12 21:48:00 · 17 阅读 · 0 评论 -
字典树-前缀统计
给定N个字符串S1,S2...SN,接下来m组询问,每次询问给一个字符串T,求S1~SN中有多少是T的前缀,输入的字符串总长度不超过106#include<bits/stdc++.h>using namespace std;const int maxn=1e6+6;int trie[maxn][27]; // 创建一个节点大小为maxn 每个节点有27个方向的的字典树 i...原创 2019-04-07 21:48:00 · 14 阅读 · 0 评论 -
邻接表
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int tot=0;int head[maxn],nxt[maxn],ver[maxn],edge[maxn];// head nxt中存tot的下标void add(int u,int v,int w) // 加入有向边(u,v)权值为w ...原创 2019-03-31 16:57:00 · 18 阅读 · 0 评论 -
vector, map, queue,set常用总结
#include<bits/stdc++.h>using namespace std;vector<int> v(9,1); 定义一个大小为9,初始化全是1的vector数组set<int> s;queue<int> q;int main(){ for(auto i:v) // 遍历vector printf(...原创 2019-03-20 18:18:00 · 15 阅读 · 0 评论 -
康托展开
原理】X = A[0] * (n-1)! + A[1] * (n-2)! + … + A[n-1] * 0! (A[i]表示在位置i后比位置i上数小的数的个数)【举例】在 (1, 2, 3, 4, 5) 5个数的排列组合中,计算 (3, 4, 1, 5, 2) 的康托展开值 X = 2 * 4! + 2 * 3! + 0 * 2! + 1 * 1! + 0 * 0...原创 2019-03-21 21:51:00 · 16 阅读 · 0 评论 -
D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结为什么会卡壳,这要是比赛的签到题的话我得哭死!!!!!#include<bits/stdc++.h>using namespace std;const int maxn=1e5+...原创 2019-04-12 19:39:00 · 20 阅读 · 0 评论 -
dp
给定三个数n,l,r(1≤n≤2⋅105,1≤l≤r≤109)求[l,r]之间选n个数求和能被3整除的方案数,其中可以重复选取,考虑选取顺序。结果对1e10+7取模#include<bits\stdc++.h>using namespace std;const int maxn=2e5+5;long long dp[maxn][3];const long long...原创 2019-02-27 16:45:00 · 14 阅读 · 0 评论 -
高精度乘法-17南宁区域赛F -The Chosen One
题目大意:给你一个n,然后从1~n隔一个选一个,挑出一个集合然后从集合中继续隔一个挑一个,直到只有一个数,问最后一个数是多少?2<=n<=1050例如n=5,先选出2,4最后选择4。n=12,先选出2,4,6,8,10,12,再选出4,8,12在选出8。可以发现这个数字一定是偶数,并且是比n小中被2除最多次的一个数,所以发现就是找一个2的幂次的小于n的最大的数。代码如下:#i...原创 2019-04-10 10:23:00 · 18 阅读 · 0 评论 -
字典树-THE XOR largest pair
题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个二进制,int一共32位,最高位为符号位,所以不考虑)#include<bits/stdc++.h>using namespace std;const int maxn=1e5*...原创 2019-04-08 17:10:00 · 19 阅读 · 0 评论