• HDU


    http://acm.hdu.edu.cn/showproblem.php?pid=6313

    题意

    让你构造一个矩阵使得里面不存在四个顶点都为1的矩形,并且矩阵里面1的个数要>=85000

    分析

    来自https://blog.csdn.net/qq_37025443/article/details/81221008

    先从25*25的构造看起

    10000 01000 00100 00010 00001
    10000 00100 00001 01000 00010
    10000 00010 01000 00001 00100
    10000 00001 00010 00100 01000
    10000 10000 10000 10000 10000
    01000 00100 00010 00001 10000
    01000 00010 10000 00100 00001
    01000 00001 00100 10000 00010
    01000 10000 00001 00010 00100
    01000 01000 01000 01000 01000

    ........

    根据上面可以得出规律:

    假设行数为x(x=1...25),列数y(y=1....25)

    单论一行来说,总共只有5个1,可以分成5组,每组一个1,每一组的1的位置=((前一组1的位置k+x%p)-1)%p+1

    那么我们只要知道每一行第一个位置在哪里就可以构造出来了。

    这样第i行第一个1的位置其实就是(x-1/p)

    那么这样我们就可以构造出来一个满足上述条件的矩阵了。

    但是这个25*25的矩阵只能满足n<=25的情况,一旦n>=25

    那么就有可能出现重复的矩阵(以这个25*25为单元重复),两个重复的矩阵找对应的4个位置就可以构成一个矩形了

    所以我们需要重新找一个质数p,使得p*p>=2000,那么可以很容易得到p=47

    #include <cstdio>
    #include <cstring>
     
    const int MAXN = 2001;
    int mp[MAXN][MAXN];
     
    int main()
    {
        int n;
        int p=47;
        n=2000;
        for(int i=0;i<(n/(p*p)+(n%(p*p)?1:0));i++)
            for(int j=0;j<(n/(p*p)+(n%(p*p)?1:0));j++)
                for(int x=1;x<=(p*p)&&(i*(p*p)+x)<=n;x++)
                    //for(int y=1;y<=p*p&&(j*(p*p)+y+(((y/p)*x)%p))<=n;y+=p)
                    for(int y=0;y<p&&(j*(p*p)+y*p+((((x-1)/p+1+(((x-1)%p+1)*y%p))-1)%p+1))<=n;y+=1)
                    {
                        mp[i*(p*p)+x][j*(p*p)+y*p+((((x-1)/p+1+(((x-1)%p+1)*y%p))-1)%p+1)]=1;
                    }
        printf("%d
    ",n);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                /*if(j%p==0) printf("%d ",mp[i][j]);
                else */printf("%d",mp[i][j]);
            }
            printf("
    ");
        }
        return 0;
     
    }
  • 相关阅读:
    echarts 图表tooltip数据默认是按照series中的数据位置排序。 鼠标移入排序
    三位加,号
    保留整数的方法
    水印vue
    vue 省市区
    平行四边形css
    css 文字样式
    js练习题
    axios 之cancelToken原理以及使用 取消上一次请求
    身份证获取生日性别
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9551742.html
Copyright © 2020-2023  润新知