• 【CQ18高一暑假前挑战赛4】标程


    【二分或者STL】

    二分:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000010;
    int a[maxn];
    int main()
    {
        int K,N,i,cnt=0,pos;
        scanf("%d%d",&K,&N);
        for(i=1;i<=N;i++) scanf("%d",&a[i]);
        sort(a+1,a+N+1);
        for(i=1;i<=N;i++){
            pos=lower_bound(a+1,a+N+1,K-a[i])-a;
            if(pos>i&&a[pos]==K-a[i]) printf("%d %d
    ",a[i],K-a[i]),cnt++;
        }
        if(cnt==0) puts("No Solution");
        return 0;
    }

    set:

    #include<iostream> 
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<set>
    using namespace std;
    int k,n,a[50005],s,q,flag;
    set<int>st;
    int main()
    {
        flag=0;
        cin>>k>>n;
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&s);
            a[i]=s;
            st.insert(s);    
        }
        sort(a+1,a+1+n);
        set<int>::iterator j;
        for(int i=1;i<=n;i++)
        {
            q=k-a[i];
            j=st.find(q);
            if(j==st.end()) continue;
            else{
                if(*j>a[i])
                {
                    flag=1;
                    printf("%d %d
    ",a[i],*j);
                }    
            }
        }
        if(flag==0) puts("No Solution");
        return 0;
    }

    【B:贪心题】

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=1010;
    int a[maxn];
    int main()
    {
        int N,i,j; ll ans=0;
        scanf("%d",&N);
        for(i=1;i<=N;i++) scanf("%d",&a[i]);
        sort(a+1,a+N+1);
        for(i=1;i<=N;i++) a[i]+=a[i-1],ans+=a[i];
        printf("%lld
    ",ans);
        return 0;
    }

    【C:暴力】

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=1e6+10;
    ll sum[maxn];
    bool check(int x)
    {
        if(x%7==0) return true;
        while(x){
            if(x%10==7) return true;
            x/=10;
        } return false;
    }
    void solve()
    {
        for(int i=1;i<maxn;i++){
           sum[i]=sum[i-1];
           if(!check(i)) sum[i]+=(ll)i*i;
        }
    }
    int main()
    {
        solve();
        int T,N;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&N);
            printf("%lld
    ",sum[N]);
        }
        return 0;
    }

    【D:欧拉函数】

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll ans; ll getphi(int x) { int res=x; for(int i=2;i*i<=x;i++){ if(x%i==0){ res=res/i*(i-1); while(x%i==0) x/=i; } } if(x>1) res=res/x*(x-1); return res; } int main() { int N; scanf("%d",&N); for(int i=1;i*i<=N;i++){ if(N%i==0) { ans+=getphi(N/i)*i; if(i*i!=N) ans+=getphi(i)*(N/i); } } printf("%lld ",ans); return 0; }

    【E:容斥】

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=500000;
    int p[maxn+10],cnt;
    short int vis[maxn+10],mu[maxn+10];
    void read(int &x){
        x=0; char c=getchar();
        while(c>'9'||c<'0') c=getchar();
        while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();
    }
    void Put(ll x)
    {
        if(x>9) Put(x/10);
        putchar(x%10+'0');
    }
    void prime()
    {
        mu[1]=1; for(int i=2;i<=maxn;i++){
            if(!vis[i]) p[++cnt]=i,mu[i]=-1;
            for(int j=1;j<=maxn&&i*p[j]<=maxn;j++){
                vis[i*p[j]]=1; mu[i*p[j]]=-mu[i];
                if(i%p[j]==0) { mu[i*p[j]]=0; break; }
            }
        }
    }
    int a[200010],num[maxn+10];ll ans;
    vector<int>G[maxn+10];
    int main()
    {
        prime();
        int N,Q,x,i,j,Max=0;
        scanf("%d%d",&N,&Q);
        for(i=1;i<=N;i++) read(a[i]),Max=max(Max,a[i]),vis[i]=0;
        for(i=1;i<=Max;i++){
          for(j=i;j<=Max;j+=i)
             G[j].push_back(i);
        } 
        while(Q--){
            read(x);
            int L=G[a[x]].size();
            if(vis[x]==1){
                for(i=0;i<L;i++) num[G[a[x]][i]]--;
                for(i=0;i<L;i++) ans-=mu[G[a[x]][i]]*num[G[a[x]][i]];        
            }
            else {        
                for(i=0;i<L;i++) ans+=mu[G[a[x]][i]]*num[G[a[x]][i]];
                for(i=0;i<L;i++) num[G[a[x]][i]]++;
            }    
            vis[x]=vis[x]^1;    
            Put(ans); puts("");
        }
        return 0;
    }
  • 相关阅读:
    设计模式之结构型(6)-享元模式(Flyweight)
    设计模式之结构型(7)-代理模式(Proxy)
    设计模式之行为型(1)-职责链模式(Chain)
    设计模式之行为型(2)-命令模式(Command)
    设计模式之行为型(3)-解释器模式(Interpreter)
    设计模式之行为型(4)-迭代器模式(Iterator)
    设计模式之行为型(5)-中介者模式(Mediator)
    设计模式之行为型(6)-备忘录模式(Memento)
    设计模式之行为型(7)-观察者模式(Observer)
    设计模式之行为型(8)-状态模式(State)
  • 原文地址:https://www.cnblogs.com/hua-dong/p/9144760.html
Copyright © 2020-2023  润新知