我是靠谱客的博主 寒冷跳跳糖,最近开发中收集的这篇文章主要介绍2021 ICPC上海站补题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

D.Strange_Fractions—暴力

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
#define int long long
void solve()
{
    int p,q;cin>>p>>q;
    int t=__gcd(p,q);
    p/=t;q/=t;
    bool f=true;
    for(int a=1;a*a<=q;a++)
    {
    	if(q%a)continue;
        int b=q/a;
        if(p*a*b==q*(a*a+b*b))
        {
            cout<<a<<" "<<b<<'n';
            f=false;break;
        }
    }
    if(f)cout<<"0 0"<<'n';
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int T;cin>>T;
    while(T--)solve();
}

E.Strange_Integers–贪心

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
#define int long long
int n,k;
int a[100010];
void solve()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    int res=0;
    for(int i=1,maxv=-2e9;i<=n;i++)
    {
        if(maxv+k<=a[i])
        {
            res++;
            maxv=a[i];
        }
    }
    cout<<res<<'n';
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int T;T=1;
    while(T--)solve();
}

G.Edge Groups–树形DP+预处理

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
const int mod = 998244353,N = 100010;
#define int long long
vector<int>g[N];
int res=1;
int pre[N];
bool vis[N];
void dfs(int u,int fa)
{
    int cnt=0;
    for(auto v : g[u])
    {
        if(v==fa)continue;
        dfs(v,u);
        if(vis[v])cnt++;
    }
    if(cnt&1)res=res*cnt%mod*pre[cnt-1]%mod;
    else res=res*pre[cnt]%mod,vis[u]=true;
}

signed main()
{
    pre[0]=1;
    for(int i=2;i<N;i+=2)pre[i]=pre[i-2]*(i-1)%mod;
    
    int n;cin>>n;
    for(int i=1,a,b;i<n;i++)
    {
        cin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    dfs(1,-1);
    cout<<res<<'n';
}

I.Steadily Growing Steam–01背包

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
#define int long long
int f[2][110][5210];
int v[110],t[110];
int n,K;
signed main()
{
    cin>>n>>K;
	for(int i=1;i<=n;i++)cin>>v[i]>>t[i];
    
    for(int i=0;i<=K;i++)
        for(int j=0;j<=5200;j++)
            f[0][i][j]=-1e18*(j!=2600);
    
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=K;j++)
        {
            for(int k=0;k<=5200;k++)
            {
                f[i&1][j][k]=f[i-1&1][j][k];
                if(k>=t[i])f[i&1][j][k]=max(f[i&1][j][k],f[i-1&1][j][k-t[i]]+v[i]);
                if(k+t[i]<=5200)f[i&1][j][k]=max(f[i&1][j][k],f[i-1&1][j][k+t[i]]+v[i]);
                if(j&&k>=2*t[i])f[i&1][j][k]=max(f[i&1][j][k],f[i-1&1][j-1][k-2*t[i]]+v[i]);
                if(j&&k+2*t[i]<=5200)f[i&1][j][k]=max(f[i&1][j][k],f[i-1&1][j-1][k+2*t[i]]+v[i]);
            }
        }
    }
    cout<<f[n&1][K][2600]<<'n';
}

最后

以上就是寒冷跳跳糖为你收集整理的2021 ICPC上海站补题的全部内容,希望文章能够帮你解决2021 ICPC上海站补题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部