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

菜菜菜 就出了几道水题

原文地址:https://www.cnblogs.com/stranger-/p/8331014.html