专栏文章

简单模板题代码

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minjd1ou
此快照首次捕获于
2025/12/02 03:22
3 个月前
此快照最后确认于
2025/12/02 03:22
3 个月前
查看原文

模板1 Flood Fill\text{Flood Fill}

CPP
#include<bits/stdc++.h>
using namespace std;
struct Pair{
	int x,y;
};
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int n;
vector < vector <bool> > mp;
int cnt=0;
bool check(Pair h)
{
	return h.x>=1&&h.x<=n&&h.y>=1&&h.y<=n&&(mp[h.x][h.y]==false);
}
void Bfs(Pair st)
{
	deque <Pair> dq;
	dq.push_back(st);
	while(!dq.empty())
	{
		Pair cur=dq.front();
		mp[cur.x][cur.y]=true;
		for(int i=0;i<4;i++)
		{
			Pair q={cur.x+dx[i],cur.y+dy[i]};
			if(check(q))
				dq.push_back(q);
		}
	}
	return ;
}
int main()
{
	scanf("%d",&n);
	mp.resize(n+1,vector <bool> (n+1,false));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			int p;
			scanf("%d",&p);
			mp[i][j]=p;
		}
	}
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(!mp[i][j]){
				cnt++;
				BFS({i,j});
			}
		}
	}
	printf("%d\n",cnt);
	return 0;
}

模板2 Is Prime?\text{Is Prime?}

CPP
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n)
{
    if(n<=1)
        return false;
    for(int i=2;i*i<=n;i++)
        if(n%i==0)
            return false;
    return true;
}

模板3 Sieve of primes\text{Sieve of primes}

CPP
#include<bits/stdc++.h>
using namespace std;
vector <bool> a(100010,true); 
void sieve(void)
{
    a[1]=false;
    for(int i=2;i<=100010;i++)
        if(a[i])
            for(int j=i*2;j<=100010;j+=i)
                a[j]=false;
}

模板4 进制转换1 (to Octal\text{to Octal}

CPP
#include<bits/stdc++.h>
using namespace std;
long long to_ll(char ch)
{
    if(ch>='0'&&ch<='9')
        return ch-'0';
    else
        return ch-'A'+10;
}
int main()
{
    int k;
    scanf("%d",&k);
    string str;
    cin>>str;
    long long ans=0;
    int cnt=0;
    for(int i=str.length()-1;i>=0;i--)
    {
        ans+=pow(k,cnt)*to_ll(str[i]);
        cnt++;
    }
    printf("%lld\n",ans);
    return 0;
}

模板5 最长不下降子序列(O(n log2 n)O(n~ log_2~n)

CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	scanf("%d",&n);
	vector <int> a(n+1),f(n+1,-1);
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(f[ans]<=a[i]){
			f[++ans]=a[i];
		}else{
			int left=1,right=ans;
			while(left<=right)
			{
				int mid=(left+right)/2;
				if(f[mid]<a[i]){
					left=mid+1;
				}else{
					right=mid-1;
				}
			}
			f[left]=a[i];
		}
	}
	printf("%d\n",ans);
	return 0;
}

模板6 背包问题

01背包
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long q,n;
	scanf("%lld%lld",&q,&n);
	vector <long long> c(n+1),w(n+1);
	for(int i=1;i<=n;i++)
		scanf("%lld%lld",&w[i],&c[i]);
	vector <long long> dp(q+1,0);
    for(int i=1;i<=n;i++)
        for(int j=q;j>=w[i];j--)
            dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
	printf("%lld",dp[q]);
	return 0;
}
完全背包
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,t;
    scanf("%lld%lld",&t,&n);
    vector <long long> v(n+1),w(n+1);
    for(int i=1;i<=n;i++)
        scanf("%lld%lld",&w[i],&v[i]);
    vector <long long> dp(t+1,0);
    for(int i=1;i<=n;i++)
        for(int j=w[i];j<=t;j++)
            dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
    printf("%lld\n",dp[t]);
    return 0;
}
重量背包(01)
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long q,n;
	scanf("%lld%lld",&q,&n);
	vector <long long> w(n+1);
	for(int i=1;i<=n;i++)
		scanf("%lld%lld",&w[i]);
	vector <long long> dp(q+1,0);
    for(int i=1;i<=n;i++)
        for(int j=q;j>=w[i];j--)
            dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
	printf("%lld",dp[q]);
	return 0;
}
重量背包(完全)
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n,t;
    scanf("%lld%lld",&t,&n);
    vector <long long> w(n+1);
    for(int i=1;i<=n;i++)
        scanf("%lld",&w[i]);
    vector <long long> dp(t+1,0);
    for(int i=1;i<=n;i++)
        for(int j=w[i];j<=t;j++)
            dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
    printf("%lld\n",dp[t]);
    return 0;
}

评论

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

正在加载评论...