算法

栈:
1.手写 #include<iostream>

using namespace std;

int n,z[233],v;

int main()
{
cin >> n >> v;
for (int a=1;a<=n;a++)
cin >> z[a];

int l=1,r=n+1;
while (l+1!=r)
{
int m=(l+r)/2;
if (v>=z[m]) l=m;
else r=m;
}
cout << l << endl;

return 0;
}
2.函数#include<cstdio>
#include<stack>

using namespace std;

stack<int> sta;

int main()
{
sta.push(233);
sta.push(2444);
sta.pop();
cout << sta.top() << endl;
cout << sta.size() << endl;

return 0;
}
队列
1.手写#include<cstdio>

using namespace std;

struct queue
{
int head=1,size=0;
int z[233];
void push(int x)
{
z[head+size] = x;
size++;
}
void pop()
{
size--;
head++;
}
int front()
{
return z[head];
}
};

int main()
{
return 0;
}
2.函数 #include<cstdio>
#include<queue>

using namespace std;

queue<int> que;

int main()
{
que.push(233);
que.push(2444);
que.pop();
cout << que.front() << endl;
cout << que.size() << endl;

return 0;
}

1.优先队列:#include<cstdio>
#include<queue>

using namespace std;

priority_queue<int> heap;

int main()
{
heap.push(23);
heap.push(233);
heap.push(2333);
heap.pop();
cout << heap.top() << endl;
cout << heap.size() << endl;
}
Map:
#include<iostream>
#include<map>
#include<string>
#include<cstdio>

using namespace std;

map<int,int> m;
map<long long,int> m2;
map<string,int> m3;

map<int, map<int,int> > mm;

int main()
{
printf("%.20lf\n",1.0/3);

m[2147483647] = 233;
m[-500] = 666;
m[-2147483648] = 9;
m2[23333333333333333333333ll] = 2333333333;

m3["hello world"] = 0;
mm[23][23]=23;
return 0;
}
较精确的判断两个实数是否相等:(c++中,求一个实数的值位数多了不是很精确如1.0/3)
#include<cstdio>

using namespace std;
const double eps=1e-8;

int main()
{
double a,b;
if (fabs(a-b)<=eps) printf("deng");
}
Pair
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
pair<int,int> p = make_pair(23,3);
cout << p.first << p.second << endl;
}
归并排序/分治
#include<iostream>

using namespace std;
int z[233],y[233];

void merge_sort(int l,int r)
{
if (l==r) return;
int m=(l+r)/2;
merge_sort(l,m);
merge_sort(m+1,r);

int p1=l,p2=m+1;
for (int a=l;a<=r;a++)
{
if (p1 <=m && p2<=r){
if (z[p1] < z[p2])
{y[a] = z[p1];p1++;}
else
{y[a] = z[p2];p2++;}
}
else{
if (p1<=m)
{y[a]=z[p1];p1++;}
else
{y[a]=z[p2];p2++;}
}
}
for (int a=l;a<=r;a++)
z[a]=y[a];
}

int main()
{
int n;
cin >> n;
for (int a=1;a<=n;a++)
cin >> z[a];
merge_sort(1,n);
}
前缀和
#include<iostream>

using namespace std;

int n,m;
int z[2333],s[2333];

int main()
{
cin >> n;
for (int a=1;a<=n;a++)
cin >> z[a];
for (int a=1;a<=n;a++)
s[a] = s[a-1] + z[a];
cin >> m;
for (int a=1;a<=m;a++)
{
int l,r;
cin>>l>>r;
cout << s[r] - s[l-1] << endl;
}
}
二分
1.#include<iostream>

2.using namespace std;

int n,z[233],v;

int main()
{
cin >> n >> v;
for (int a=1;a<=n;a++)
cin >> z[a];

int l=0,r=n;
while (l+1!=r)
{
int m=(l+r)/2;
if (v>z[m]) l=m;
else r=m;
}
if (z[r] == v) cout << "yes" << endl;
else cout << "no" << endl;

return 0;
}
1.a*b*c%p=(a*b%p)*c%p.
求 a^b%p.

快速幂:

st表
相当于f[i][j],表示从a[i]开始的2^j个数中的最大值,放进f[i][j].中

 


贪心
对于所有贪心题,只要你推导出来了n=2的时候如何判断a在前面还是b在前面的函数的时候,直接把这个函数放到sort里面,就是最优解.

上面是简化前,下面是简化后.


矩阵:
两个矩阵能做乘法的前提是一个矩阵的列数等于另一个矩阵的行数.并且 n*m的矩阵×m*k的矩阵的结果为n*k的矩阵.
加const 使得既取了地址又避免了改变数值.
矩阵乘法没有交换律

转载于:https://www.cnblogs.com/liumengliang/p/11189963.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值