首页 > 其他 > 详细

HDU5088

时间:2014-11-03 20:52:30      阅读:267      评论:0      收藏:0      [点我收藏+]

对于每个数,把它看做0和1组成的行,n个数就是n行,判断形成的矩阵中【秩】是否等于【n】

bubuko.com,布布扣
#include<iostream>
#include<cstdio>
using namespace std;
const int NO=1005;
long long s[65][NO];
long long p[NO];
int GET(long long k)
{
    int ans=0;
    while(k)
    {
        k>>=1;
        ans++;
    }
    return ans;
}
int main()
{
    freopen("1.txt","r",stdin);
    int ttt,n;
    scanf("%d",&ttt);
    while(ttt--)
    {
        for(int i=0;i<=64;i++)
            s[i][0]=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%I64d",&p[i]);
            int kkk=GET(p[i]&-p[i]);
            s[kkk][++s[kkk][0]]=p[i];
        }
        if(n>40)
        {
            puts("Yes");
            continue;
        }
        int num=0;
        for(int i=1;i<=64;i++)
            if(s[i][0])
            {
                for(int j=2;j<=s[i][0];j++)
                {
                    long long k=s[i][1]^s[i][j];
                    int kkk=GET(k&-k);
                    s[kkk][++s[kkk][0]]=k;
                }
                num++;
            }
        puts(num==n?"No":"Yes");
    }
    return 0;
}
View Code

 

HDU5088

原文:http://www.cnblogs.com/Lnizei/p/4072094.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!