@kaike
在我慢悠悠的赶DP的时候,突然意识到noip将要到来了
一周后的期中考还不太靠谱了,还有noip??
wtf!
贪心分治不好好写,图刷了半边还不太熟又去搞DP,天要亡我我不能亡啊
QAQ在机房彷徨半天身边大神改了一个又一个bug
我要复习,我要学习,什么都拦不住我对code的热爱
插入排序(假设前i个数已经排列好,把第i个数插进去)
1 for(int i=2;i<=n;i++) 2 { 3 a[0]=a[i]; 4 for(int j=i-1;a[j]>a[0];j--) 5 a[j+1]=a[j]; 6 a[j+1]=a[0]; 7 }
选择排序(处理第i个数时,找到他后面数的最小值,交换)
1 for(int i=1;i<=n;i++) 2 for(int j=i+1;j<=n;j++) 3 if(a[i]>a[j]){ int t=a[i]; a[i]=a[j]; a[j]=t;}
冒泡排序(对相邻的两个数进行比较)
1 for(int i=1;i<n;i++) 2 for(int j=n;j>i;j--) 3 if(a[j-1]>a[j]) 4 swap(a[j-1],a[j]);
求最大连续和
设一个s连续加,如果累加和为正数,则往后加,若累加和为负数,则为0,中间设一个最大数。
求连续最大子矩阵
将连续k行的元素纵向相加,并对相加后所得的序列求连续最大和。
floodifill
就是把每个点都枚举一遍,通过dfs or bfs
dfs 就是通过自身递归通过方位数组枚举
bfs 就是通过队列免去递归so要比dfs快一点
floodifill和迷宫问题都要加边界
若是枚举方案数,则要加上回溯,特别是迷宫问题
并查集
就是用了许多函数,然而并不难。
主要是找到父亲,判断父亲是否一样,合并成一家。
1 /* 2 by kaike 3 */ 4 #include<iostream> 5 #include<algorithm> 6 #include<cstring> 7 #include<string> 8 #include<cstdio> 9 using namespace std; 10 const int MAXN=5010; 11 int n,m,p,x,y; 12 int f[MAXN]; 13 int getf(int x) 14 { 15 if(f[x]!=x) f[x]=getf(f[x]); 16 return f[x]; 17 } 18 void merge(int x,int y) 19 { 20 int t1=getf(x),t2=getf(y); 21 if(t1!=t2) 22 f[t2]=t1; 23 } 24 bool pan(int x,int y) 25 { 26 int t1=getf(x),t2=getf(y); 27 if(t1==t2) return 1; 28 return 0; 29 } 30 void init() 31 { 32 cin>>n>>m>>p; 33 for(int i=1;i<=n;i++) 34 f[i]=i; 35 for(int i=1;i<=m;i++) 36 { 37 cin>>x>>y; 38 merge(x,y); 39 } 40 for(int i=1;i<=p;i++) 41 { 42 cin>>x>>y; 43 if(pan(x,y)) cout<<"Yes"<<endl; 44 else cout<<"No"<<endl; 45 } 46 } 47 int main() 48 { 49 init(); 50 return 0; 51 }
快速幂
1 void work() 2 { 3 long long ans=1; 4 while(k!=0) 5 { 6 if(k%2==1) ans*=s; 7 s=s*s; 8 k/=2; 9 } 10 }
火柴排队
1439
topsort
小数的输出方法
离散化
割点割边