通用模板
priority_queue
默认大顶堆
小顶堆
priority_queue<int,vector
优先队列的修改
include<bits/stdc++.h>
using namespace std;
const int N=1010,M=10010;
struct node{
int id,num;
bool operator<(const node& a)const{
if (id != a.id)
return a.id < id;
else
return a.num > num;
}
};
priority_queue
vector<pair<int,int>>res;
int main(){
s.push({2,2});
s.push({2,1});
s.push({2,3});
while(!s.empty()){
cout<<s.top().id<<' '<<s.top().num<<'\n';
s.pop();
}
return 0;
}
include
include
using namespace std;
void max_k_num()
{
int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
int k = 5;
// 小根堆
priority_queue<int, vector
for (auto n : source_data)
{
if (q.size() == k)
{
if (n > q.top())
{
q.pop();
q.push(n);
}
}
else
q.push(n);
}
while (!q.empty())
{
cout << q.top() << endl;
q.pop();
}
}
这道题偷了个模板,我之前求组合数都是用的动态规划优化的,没想到题解用的优化的更猛。啥也别说了偷了
ll ans[67][67]={0};
ll C(ll n,ll m){
if(m0 || mn) return 1;
if(ans[n][m] != 0)return ans[n][m];
return ans[n][m] = C(n-1,m)+ C(n-1,m-1);//赋值给res[n][m]并返回
}
最短路floyd
include<bits/stdc++.h>
define INF 0x7fffffff/2 //int最大值
using namespace std;
int h,w;
int x,dis[15][15];
void floyd(){
for(int k=0;k<=9;k++){ //枚举每一个点
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
if(dis[i][k]!=INF and dis[k][j]!=INF) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); //松弛操作
}
}
}
}
int main(){
scanf("%d%d",&h,&w);
dis[i][j]//i到j的距离
floyd();
int ans=0;
cout<<dis[x][y];//x到y的最短路径长度
return 0;
}
快速幂
int quik_power(int base, int power, int p)
{
int result = 1;
while (power > 0)
{
if (power & 1)
result = result * base % p;
//根据公式每个项都取余数后在再做累乘
base = base * base % p ;
//根据公式每个项都取余数后在再做平方操作
power >>= 1;
}
//根据公式在最后的的结果上再来一次取余数
return result % p;
}