专栏文章

一些板子

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mins0fix
此快照首次捕获于
2025/12/02 07:24
3 个月前
此快照最后确认于
2025/12/02 07:24
3 个月前
查看原文
本文章记录一些题目板子,考前记得看一看。
1.快速幂
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,p;
int qpow(int a,int b)
{
	int ans=1ll%p;
	while(b!=0)
	{
		if(b&1)
		{
			ans=ans*a%p;
		}
		a=a*a%p;
		b>>=1;
	}
	return ans%p;
}
int main()
{
	cin>>a>>b>>p;
	cout<<a<<"^"<<b<<" mod "<<p<<"="<<qpow(a,b);
	return 0;
}
2.排列组合数
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int fact[200010];
int infact[200010]; 
int A(int x,int y){return fact[x]*infact[x-y]%mod;}
int C(int x,int y){return fact[x]*infact[x-y]%mod*infact[y]%mod;}
int qpow(int a,int b){
	int ans=1ll%mod;
	while(b!=0){
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans%mod;
}
signed main()
{
	fact[0]=infact[0]=1;
	for(int i=1;i<200001;i++)
	{
		fact[i]=fact[i-1]*i%mod;
		infact[i]=infact[i-1]*qpow(i,mod-2)%mod;
	}
	return 0;
}
3.Dijkstra算法模版
CPP
#include<bits/stdc++.h> 
using namespace std;
int from[100010],to[200010],net[200010],v[200010],cnt,d[100010];
bool b[100010];
void add(int x,int y,int w)
{
    to[++cnt]=y;
    v[cnt]=w;
    net[cnt]=from[x];
    from[x]=cnt;
}
priority_queue <pair<int,int> > q;
int main()
{
    int n,m,s;
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
	{
		int x,y,z;
        cin>>x>>y>>z;
        add(x,y,z);
    }
    for(int i=1;i<=n;i++)
    {
    	d[i]=1e9;
	}
    d[s]=0;
    q.push({0,s});
    while(!q.empty())
	{
        int x=q.top().second;
        q.pop(); 
        if(b[x]) continue;
        b[x]=1;
        for(int i=from[x];i;i=net[i])
		{
            int y=to[i],l=v[i];
            if(d[y]>d[x]+l)
			{
                d[y]=d[x]+l;
                q.push({-d[y],y});
            }
        }
    }
    for(int i=1;i<=n;i++)
	{
		cout<<d[i]<<" ";
	}
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...