/ SB域 / 题库 / 珍珠 /

题解

1 条题解

  • 0
    @ 2018-07-14 22:41:10

    这题思路很简单,就是把能比较轻重的都比一边,统计比第i个重的个数是否超过一半,超过一半这颗珍珠就可以排除,答案+1,然后轻的再统计一遍。用二维数组来存储两个珍珠间的轻重关系, a[i][j] = 1 表示第i个比第j个重,既第j个比第i个轻。如果a[i][k] = 1 并且 a[k][j] = 1 ,那么就可以推出a[i][j] = 1

    /*
    检查:
    一、数据范围
    二、输入输出
    三、边界条件(2、循环 3、判断 4、递归)
    四、数据处理(计算)
    五、理论论证(思路)
    */
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<climits>
    #include<cfloat>
    #include<queue>
    
    using namespace std;
    int n,m,ans,a[105][105];
    int main()
    {
    
    //  freopen("x.in","r",stdin);
    //  freopen("x.out","w",stdout);
        int x,y;
        cin>>n>>m;
        for(int i = 1; i <= m; i++)
        {
            cin>>x>>y;
            a[x][y]=1;
        }
        for(int k = 1; k <= n; k++)
        {
            for(int i = 1; i <= n; i++)
            {
                for(int j = 1; j <= n; j++)
                {
                    if(a[i][k]&&a[k][j])
                        a[i][j]=1;
                }
            }
        }
        for(int i = 1; i <= n; i++)
        {
            int ansp=0;
            for(int j = 1; j <= n; j++)
            {
                if(a[i][j])
                    ansp++;
            }
            if(ansp>=(n+1)/2)
                ans++;
            ansp=0;
            for(int j = 1; j <= n; j++)
            {
                if(a[j][i])
                    ansp++;
            }
            if(ansp>=(n+1)/2)
                ans++;
        }
        cout<<ans;
        return 0;
    }
    
    
  • 1

信息

难度
4
分类
(无)
标签
递交数
30
已通过
11
通过率
37%
上传者