zoukankan      html  css  js  c++  java
  • CSP认证201812

    201812-1

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define ll long long
    const int N=200005;
    const int mod=1e9+7;
    const double eps=1e-8;
    const double PI = acos(-1.0);
    #define lowbit(x) (x&(-x))
    ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
    ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
    ll inv(ll a,ll p){return qpow(a,p-2);}
    int main()
    {
        std::ios::sync_with_stdio(false);
       // freopen("in.txt","r",stdin);
        ll r,y,g;
        cin>>r>>y>>g;
        int n;
        cin>>n;
        ll ans=0;
        for(int i=1;i<=n;i++)
        {
            ll o,x;
            cin>>o>>x;
            if(o==1)
            {
                ans+=x;
            }
            else if(o==2)
            {
                ans+=x+r;
            }
            else if(o==0)
            {
                ans+=x;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

    201812-2

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define ll long long
    const int N=200005;
    const int mod=1e9+7;
    const double eps=1e-8;
    const double PI = acos(-1.0);
    #define lowbit(x) (x&(-x))
    int main()
    {
        std::ios::sync_with_stdio(false);
    //    freopen("in.txt","r",stdin);
        ll r,y,g,tot;
        cin>>r>>y>>g;
        tot=r+y+g;
        int n;
        cin>>n;
        ll ans=0;
        for(int i=1; i<=n; i++)
        {
            ll o,x;//红绿黄
            cin>>o>>x;
            if(o==0)
            {
                ans+=x;
            }
            else if(o==1)//红
            {
                if(ans>=x)//换灯
                {
                    ll t=ans-x;
                    t%=tot;
                    if(t<g)
                    {
                        continue;
                    }
                    else if(t<g+y)
                    {
                        ans+=(r+(g+y-t));
                    }
                    else if(t<g+y+r)
                    {
                        ans+=((g+y+r)-t);
                    }
                }
                else
                {
                    ans+=(x-ans);
                }
            }
            else if(o==2)//黄
            {
                if(ans>=x)//换灯
                {
                    ll t=ans-x;
                    t%=tot;
                    if(t<r)//红
                    {
                        ans+=(r-t);
                    }
                    else if(t<r+g)//绿
                    {
                        continue;
                    }
                    else if(t<g+y+r)//黄
                    {
                        ans+=((g+y+r)-t+r);
                    }
                }
                else
                {
                    ans+=x-ans+r;
                }
            }
            else if(o==3)
            {
                if(ans>=x)//换灯
                {
                    ll t=ans-x;
                    t%=tot;
                    if(t<y)//黄
                    {
                        ans+=(y-t+r);
                    }
                    else if(t<y+r)//红
                    {
                        ans+=(y+r-t);
                    }
                    else if(t<g+y+r)//绿
                    {
                        continue;
                    }
                }
                else
                {
                    continue;
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

      

    201812-4

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define ll long long
    const int maxn=5e5+5;
    const int maxm=5e5+5;
    const int mod=1e9+7;
    const double eps=1e-8;
    const double PI = acos(-1.0);
    #define lowbit(x) (x&(-x))
    struct edge
    {
        ll u,v,w;
    } eg[maxm];
    ll tot=0,pre[maxn],n,m,r;
    void addedge(ll u,ll v,ll w)
    {
        eg[tot].u=u;
        eg[tot].v=v;
        eg[tot++].w=w;
    }
    bool cmp(edge a,edge b)
    {
        return a.w<b.w;
    }
    ll find(ll x)
    {
        if(pre[x]==x)  return x;
        else return pre[x]=find(pre[x]);
    }
    ll kruskal(ll n)
    {
        sort(eg,eg+tot,cmp);
        ll cnt=0,ans=0,mx=0;
        for(ll i=0; i<tot; i++)
        {
            ll u=eg[i].u,v=eg[i].v,w=eg[i].w;
            ll fu=find(u),fv=find(v);
            if(fu!=fv)
            {
                ans+=w;
                pre[fu]=fv;
                mx=max(mx,w);
                cnt++;
            }
            if(cnt==n-1)    break;
        }
        if(cnt<n-1) return -1;
        else return mx;
    }
    void init()
    {
        tot=0;
        for(ll i=1; i<=n; i++)
            pre[i]=i;
    }
    int main()
    {
        std::ios::sync_with_stdio(false);
        while(cin>>n>>m>>r)
        {
            init();
            for(int i=0; i<m; i++)
            {
                ll a,b,c;
                cin>>a>>b>>c;
                addedge(a,b,c);
                addedge(b,a,c);
            }
            cout<<kruskal(n)<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    flex产生水平滚动条
    js中的类
    typescript
    vue练习
    vue-cli2脚手架搭建
    Luogu P1970 花匠
    Luogu P1311 选择客栈
    Luogu P1016 旅行家的预算
    Luogu P1144 最短路计数
    Luogu P1091 合唱队形
  • 原文地址:https://www.cnblogs.com/mcq1999/p/11923453.html
Copyright © 2011-2022 走看看