• 【jzoj2017.8.21提高组A】


    太菜了,刷刷NOIP题玩玩。

    今天的题好像以前有做过(雾)

    A.

    #include<bits/stdc++.h>
    typedef long long ll;
    int n,q,phi,p[210],cnt;
    ll x;
    inline ll sqr(ll x){return x*x;}
    ll fpow(ll x,ll p){
        ll ans=1;
        for(;p;p>>=1,x=x*x%n)if(p&1)ans=(ans*x)%n;
        return ans;
    }
    inline ll read(){
        ll f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        n=read();q=read();phi=n;int qwq=n;
        for(int i=2;i*i<=n;i++){
            if(n%i==0)phi=phi/i*(i-1);
            while(n%i==0)n/=i;
        }
        if(n!=1)phi=phi/n*(n-1);
        p[cnt=1]=1;n=qwq;
        for(int i=2;i*i<=n;i++)if(phi%i==0){p[++cnt]=i;if(i*i!=phi)p[++cnt]=phi/i;}
        while(q--){
            x=read();char ch='1';
            if(fpow(x,phi)!=1){putchar('0');continue;}
            for(int j=1;j<=cnt;j++)if(fpow(x,p[j])==1){ch='0';break;}
            putchar(ch);
        }
    }

    B.

    #include<bits/stdc++.h>
    #define N 100010
    const int yql=1e9+7;
    typedef long long ll;
    using namespace std;
    struct Edge{int u,v,next;}G[2*N];
    int tot=0,head[4*N],fa[N],n;
    ll ans,w[N],sumv[N];
    void addedge(int u,int v){
        G[++tot].u=u;G[tot].v=v;G[tot].next=head[u];head[u]=tot;
        G[++tot].u=v;G[tot].v=u;G[tot].next=head[v];head[v]=tot;
    }
    inline ll read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    void dfs(int u,int f){
        for(int i=head[u];i;i=G[i].next){
            int v=G[i].v;if(v==f)continue;
            fa[v]=u;dfs(v,u);
            sumv[u]=(sumv[u]+sumv[v])%yql;
        }
        ll tmp=(sumv[u]*2LL+w[u])%yql*w[u]%yql;
        for(int i=head[u];i;i=G[i].next){
            int v=G[i].v;if(v==f)continue;
            tmp=(tmp+(sumv[u]+yql-sumv[v])%yql*sumv[v])%yql;
        }
        //printf("%lld
    ",tmp);
        ans=(ans+tmp*w[u])%yql;
        sumv[u]=(sumv[u]+w[u])%yql;
    }
    int main(){
        n=read();w[1]=read();
        for(int i=2;i<=n;i++){
            int u=read();w[i]=read();
            i[w]%=yql;
            addedge(u,i);
        }
        dfs(1,0);
        //for(int i=1;i<=n;i++)printf("%lld ",sumv[i]);puts("");
        printf("%lld
    ",ans%yql);
        return 0;
    }

    C.

    #include<bits/stdc++.h>
    const int N=200010;
    using namespace std;
    int n,m,fa[N],cnt=0;
    map<string,int> mps;
    struct Edge{int u,v,w;}G[N];
    char s[100],p[100];
    bool operator <(Edge x,Edge y){return x.w<y.w;}
    inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        n=read();m=read();
        for(int i=1;i<=m;i++){
            scanf("%d%s%s",&G[i].w,s,p);
            string qwq=string(s);
            if(mps[qwq]==0)mps[qwq]=++cnt;
            G[i].u=mps[qwq];
            qwq=string(p);
            if(mps[qwq]==0)mps[qwq]=++cnt;
            G[i].v=mps[qwq];
        }
        for(int i=1;i<=cnt;i++)fa[i]=i;
        sort(G+1,G+m+1);
        for(int i=1;i<=m&&n;i++){
            int x=find(G[i].u),y=find(G[i].v);
            if(x!=y){fa[x]=y;--n;printf("%d
    ",G[i].w);}
        }
        for(int i=1;i<=n;i++)puts("INF");
    }
  • 相关阅读:
    [CF786B] Legacy
    [CF833B] The Bakery
    [JSOI2008] 最小生成树计数
    [SDOI2010] 外星千足虫
    [POJ1830] 开关问题
    [Luogu1365] WJMZBMR打osu! / Easy
    [Noip2016] 换教室
    [NOI2002] 荒岛野人
    [计蒜之道复赛 2018] 贝壳找房计数比赛
    [SDOI2014] 旅行
  • 原文地址:https://www.cnblogs.com/zcysky/p/7406948.html
Copyright © 2020-2023  润新知