zoukankan      html  css  js  c++  java
  • codeforces Gym 100735 D、E、G、H、I

    http://codeforces.com/gym/100735

    D题 直接暴力枚举 感觉这道题数据有点问题 为什么要先排下序才能过?不懂。。

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <string>
    #include <queue>
    #include <map>
    #include <vector>
    using namespace std;
    const int maxn = 55;
    const int maxm = 1e4+10;
    const int inf = 0x3f3f3f3f;
    const double epx = 1e-10;
    typedef long long ll;
    int n,m;
    ll a[maxn];
    int main()
    {
        while(cin>>n)
        {
            for(int i=1; i<=n; i++)
            {
                scanf("%I64d",&a[i]);
            }
            sort(a+1,a+1+n);
            int ans=0;
            int visit[maxn];
            memset(visit,0,sizeof(visit));
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
    
                    for(int k=1;k<=n;k++)
                    {
                        if(visit[i]==0&&visit[j]==0&&visit[k]==0&&i!=j&&j!=k&&i!=k&&a[i]+a[k]>a[j]&&a[i]+a[j]>a[k]&&a[j]+a[k]>a[i])
                        {
                            ans++;
                            visit[i]=1,visit[j]=1,visit[k]=1;
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
    View Code

    E题  n*n的数字矩阵 横着 竖着 对角线 相加都等于val 可以推出 公式把矩阵   每行(或者每列)已有的数字加起来除以n-1=val 每行(每列)只有一个未知用val去减就好了。

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <string>
    #include <queue>
    #include <map>
    #include <vector>
    using namespace std;
    const int maxn = 1005;
    const int maxm = 1e4+10;
    const int inf = 0x3f3f3f3f;
    const double epx = 1e-10;
    typedef long long ll;
    int n,m;
    ll a[maxn][maxn];
    int main()
    {
        cin>>n;
        ll sum[maxn],zong=0;
        for(int i=0; i<n; i++)
        {
            sum[i]=0;
            for(int j=0; j<n; j++)
            {
                scanf("%I64d",&a[i][j]);
                sum[i]+=a[i][j];
            }
            zong+=sum[i];
        }
        zong=zong/(n-1);
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                ll x=a[i][j];
                if(i==j)
                    x=zong-sum[i];
                if(j==n-1)
                    printf("%I64d
    ",x);
                else
                    printf("%I64d ",x);
            }
        }
    }
    View Code

    G题 水题

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <string>
    #include <queue>
    #include <map>
    #include <vector>
    using namespace std;
    const int maxn = 1e5+10;
    const int maxm = 1e4+10;
    const int inf = 0x3f3f3f3f;
    const double epx = 1e-10;
    typedef long long ll;
    int n,m;
    char a[maxn];
    int main()
    {
        cin>>a;
        int sum=0,ans=0;
        int len=strlen(a);
        for(int i=0;i<len;i++)
        {
            if(a[i]=='1')
                ans++;
        }
        printf("%d
    ",min(ans,len-ans));
    }
    View Code

    H题 要用二分图最大匹配写  用dfs会T的很惨。

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream>
    #include <sstream>
    #include <algorithm>
    #include <string>
    #include <queue>
    #include <map>
    #include <vector>
    using namespace std;
    const int maxn = 105;
    const int maxm = 1e4+10;
    const int inf = 0x3f3f3f3f;
    const double epx = 1e-10;
    typedef long long ll;
    int n;
    char a[maxn][10];
    char s[maxn];
    int len;
    int visit[maxn];
    int m[maxn][maxn];
    int match[maxn];
    bool found(int x)
    {
        for(int i=1;i<=n;i++)
        {
            if(m[x][i]==1&&visit[i]==0)
            {
                visit[i]=1;
                if(match[i]==-1||found(match[i]))
                {
                    match[i]=x;
                    return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        cin>>s>>n;
        len=strlen(s);
        memset(m,0,sizeof(m));
        memset(match,-1,sizeof(match));
        for(int i=1; i<=n; i++)
        {
            for(int j=0; j<6; j++)
            {
                cin>>a[i][j];
                for(int k=0;k<len;k++)
                {
                    if(a[i][j]==s[k])
                        m[k][i]=1;
                }
            }
        }
    
        int ans=0;
        for(int i=0;i<len;i++)
        {
            memset(visit,0,sizeof(visit));
            if(found(i))
                ans++;
        }
        if(ans==len)
            printf("YES
    ");
        else
            printf("NO
    ");
    }
    View Code

    I题 大数加法 Java大数类

    import java.util.*;
    import java.math.*;
    public class Main
    {
        public static void main(String args[])
        {
            Scanner cin = new Scanner(System.in);
            BigInteger a, b,c,a1,b1,c1;
            while (cin.hasNext())
            {
                a = cin.nextBigInteger();
                b = cin.nextBigInteger();
                c = cin.nextBigInteger();
                a1=a.add(a);b1=b.add(b);c1=c.add(c);
                int flag=0;
                if(a.add(b).compareTo(c)==0)
                    flag=1;
                else if(a.add(c).compareTo(b)==0)
                    flag=1;
                else if(b.add(c).compareTo(a)==0)
                    flag=1;
                else if(a1.compareTo(b)==0)
                    flag=1;
                else if(a1.compareTo(c)==0)
                    flag=1;
                else if(b1.compareTo(a)==0)
                    flag=1;
                else if(b1.compareTo(c)==0)
                    flag=1;
                else if(c1.compareTo(b)==0)
                    flag=1;
                else if(c1.compareTo(a)==0)
                    flag=1;
                if(flag==1)
                     System.out.println("YES");
                else
                     System.out.println("NO");
            }
        }
    }
    View Code

    菜菜菜 就出了几道水题

  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/stranger-/p/8331014.html
Copyright © 2011-2022 走看看