zoukankan      html  css  js  c++  java
  • Codeforces Round #603 (Div. 2)

    A. Sweet Problem

    简单题,排个序判断a+b与c的关系,<就是a+b>是(a+b+c)/2

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+5;
    ll a[3];
    int main()
    {
        int t;
        scanf("%d",&t);
     
        for(int i=1;i<=t;++i)
        {
            scanf("%d%d%d",&a[0],&a[1],&a[2]);
            sort(a,a+3);
            ll ans=0;
            if(a[0]+a[1]<=a[2])ans=a[0]+a[1];
            else ans+=a[2]+(a[0]+a[1]-a[2])/2;
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code

    B. PIN Codes

    简单题,将不超过10个相同的数改动最少位使之全部不同。显然即使10个相同最多也只用改变一位,用桶排序判断该数出现次数,改变数字随便遍历一位求解即可。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+5;
    int a[100];
    int b[10000];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            memset(b,0,sizeof(b));
            int n;
            scanf("%d",&n);
            for(int i=1;i<=n;++i)
            {
                scanf("%d",&a[i]);
                b[a[i]]++;
            }
            int ans=0;
            for(int i=0;i<10000;++i)
            {
                if(b[i]>1)ans+=b[i]-1;
            }
            printf("%d
    ",ans);
            for(int i=1;i<=n;++i)
            {
                if(b[a[i]]==1)printf("%04d
    ",a[i]);
                else
                {
                    for(int j=1;j<=9;++j)
                    {
                        if(a[i]%10+j>9)
                        {
                            if(b[a[i]+j-10]==0)
                            {
                                printf("%04d
    ",a[i]+j-10);
                                b[a[i]+j-10]=1;
                                break;
                            }
                        }
                        else
                        {
                            if(b[a[i]+j]==0)
                            {
                                printf("%04d
    ",a[i]+j);
                                b[a[i]+j]=1;
                                break;
                            }
                        }
                    }
                    b[a[i]]--;
                }
            }
        }
        return 0;
    }
    View Code

    C. Everyone is a Winner!

    题意是让你输出n除以n+1到1的数,输出不重复的数字。数据范围给到了1e9,写了一个直接模拟的做法,可以发现sqrt(n)之前的数一定不同。所以可以直接输出0-sqrt(n)的数,后面的在模拟即可。复杂度降到O(sqrt(n))。统计个数的时候最初用了sqrt(n)*2。发现会有一点误差。所以是模拟算了一遍在输出。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+5;
    int a[100];
    int b[10000];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            int p=-1;
            int ans=sqrt(n)+1;
            for(int i=sqrt(n);i>=1;--i)
            {
                if(n/i==i)continue;
                ans++;
            }
            printf("%d
    0",ans);
            for(int i=1;i<=sqrt(n);++i)printf(" %d",i);
            for(int i=sqrt(n);i>=1;--i)
            {
                if(n/i==i)continue;
                printf(" %d",(n/i));
            }
            printf("
    ");
        }
        return 0;
    }
    View Code

    D. Secret Passwords

    题意是给出若干组字符串,不同组字符串如果有相同元素,就可以合并起来,求合并后还剩几组。应该是并查集的题目。由题意可知最多也只有26组。对于每组数据都让他们向最小的字母合并,最后判断该字母有没有出现和并查集等于自身的个数即可

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e6+5;
    char s[N];
    int b[30];
    int f[30];
    int c[30];
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<30;++i)f[i]=i;
        for(int i=1;i<=n;++i)
        {
            scanf("%s",s);
            int len=strlen(s);
            for(int i=0;i<26;++i)b[i]=0;
            for(int j=0;j<len;++j)
            {
                b[s[j]-'a']++;
                c[s[j]-'a']++;
            }
            int flag=0;
            int t=0;
            for(int i=0;i<26;++i)
            {
                if(b[i])
                {
                    if(flag==0)
                    {
                        flag=1;
                        t=i;
                    }
                    else
                    {
                        f[i]=t;
                    }
                }
            }
        }
        int ans=0;
        for(int i=0;i<26;++i)if(c[i])ans++;
        for(int i=0;i<26;++i)
        {
            if(c[i]&&f[i]!=i)ans--;
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    HTML表单
    USB3.0接口传输速度慢
    工作总结
    前台获取时间差--兼容那些事
    多个时间段统计
    【Spring】--OpenSessionInViewFilter 的配置及作用
    【Hibernate】--关联关系映射:继承映射
    【Hibernate】--关联关系映射:多对多映射
    【Spring】--Spring方法注入
    【Hibernate】--关联关系映射:一对多和多对一
  • 原文地址:https://www.cnblogs.com/yoududezongzi/p/11962164.html
Copyright © 2011-2022 走看看