zoukankan      html  css  js  c++  java
  • 日常训练赛 Problem C – Complete Naebbirac’s sequence

    比赛链接https://vjudge.net/contest/256988#status/17111202012/C/0/

    大意:三个操作,使得输入的数中,从1-n,每一个数出现的次数相同。

    wa代码(只是考虑了三个数的情况):

    #include<iostream>
    #include<string>
    #include<map>
    #include<vector>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<stdio.h>
    using namespace std;
    # define maxn 1000+10
    # define inf 0x3f3f3f3f
    int vis[maxn];
    int main()
    {
        int n,m;
        memset(vis,0,sizeof(vis));
        scanf("%d%d",&n,&m);
        for(int i=1; i<=m; i++)
        {
            int temp;
            scanf("%d",&temp);
            vis[temp]++;
        }
        if((m+1)%n==0)
        {
            int t=(m+1)/n;
            int num1=0,num2=0;
            int s=0;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]!=t)
                {
                    num1++;
                    num2=vis[i];
                    s=i;
                }
            }
            if(num1==1&&num2==t-1)
            {
                printf("+%d
    ",s);
                return 0;
            }
        }
        if((m-1)%n==0)
        {
            int t=(m-1)/n;
            int num1=0,num2=0;
            int s=0;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]!=t)
                {
                    num1++;
                    num2=vis[i];
                    s=i;
                }
            }
            if(num1==1&&num2==t+1)
            {
                printf("-%d
    ",s);
                return 0;
            }
        }
        if(m%n==0)
        {
                   int temp=m/n;
            int s1=inf,s2=-inf,w1,w2;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]<s1)
                {
                    s1=vis[i];
                    w1=i;
                }//出现的最小次数
                if(vis[i]>s2)
                {
                    s2=vis[i];
                    w2=i;
                }//出现的最多次数
            }
            if(s1==s2-2&&s1+1==temp)
            {
                printf("-%d+%d
    ",w2,w1);
                return 0;
            }
        }
        printf("*
    ");
        return 0;
    }

    AC代码(新思路,按照平均数来找):

    #include<iostream>
    #include<string>
    #include<map>
    #include<vector>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<stdio.h>
    using namespace std;
    # define maxn 1000+10
    # define inf 0x3f3f3f3f
    int vis[maxn];
    int main()
    {
        int n,m;
        memset(vis,0,sizeof(vis));
        scanf("%d%d",&n,&m);
        for(int i=1; i<=m; i++)
        {
            int temp;
            scanf("%d",&temp);
            vis[temp]++;
        }
        if((m+1)%n==0)
        {
            int t=(m+1)/n;
            int num1=0,num2=0;
            int s=0;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]!=t)
                {
                    num1++;
                    num2=vis[i];
                    s=i;
                }
            }
            if(num1==1&&num2==t-1)
            {
                printf("+%d
    ",s);
                return 0;
            }
        }
        if((m-1)%n==0)
        {
            int t=(m-1)/n;
            int num1=0,num2=0;
            int s=0;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]!=t)
                {
                    num1++;
                    num2=vis[i];
                    s=i;
                }
            }
            if(num1==1&&num2==t+1)
            {
                printf("-%d
    ",s);
                return 0;
            }
        }
        if(m%n==0)
        {
                   int temp=m/n;
            int s1=inf,s2=-inf,w1,w2;
            for(int i=1; i<=n; i++)
            {
                if(vis[i]<s1)
                {
                    s1=vis[i];
                    w1=i;
                }//出现的最小次数
                if(vis[i]>s2)
                {
                    s2=vis[i];
                    w2=i;
                }//出现的最多次数
            }
            if(s1==s2-2&&s1+1==temp)
            {
                printf("-%d +%d
    ",w2,w1);
                return 0;
            }
        }
        printf("*
    ");
        return 0;
    }
    
  • 相关阅读:
    getAttribute()方法
    getElementsByTagName()方法
    DOM方法 getElementsByName()方法
    python 与
    run_debug和run_demo的区别
    sh脚本写法
    使用snapshot继续训练网络
    安卓获取数据demo出现的问题
    查看文件大小
    重命名文件夹名字
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262876.html
Copyright © 2011-2022 走看看