• Maximal Binary Matrix CodeForces


    题目链接

    题意有点坑:

    给你一个N*N的矩阵,让你填入K个1,使之整个矩阵关于左上到右下的对角线对称,并且这个要求这个矩阵的字典序最大。

    对矩阵的字典序的定义是从每一行的第一个元素开始比较,大着为字典序较大。

    思路:

    根据字典序的定义贪心的从第一个元素开始走,如果没被填1,就填1并且关于对角线的对称的位置也填1,共计消耗两个k。

    如果是i==j,即对角线的位置只需要消耗一个k。

    我的AC代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <vector>
    #define rep(i,x,n) for(int i=x;i<n;i++)
    #define repd(i,x,n) for(int i=x;i<=n;i++)
    #define pii pair<int,int>
    #define pll pair<long long ,long long>
    #define gbtb std::ios::sync_with_stdio(false)
    #define MS0(X) memset((X), 0, sizeof((X)))
    #define MSC0(X) memset((X), '', sizeof((X)))
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define gg(x) getInt(&x)
    using namespace std;
    typedef long long ll;
    inline void getInt(int* p);
    const int maxn=1000010;
    const int inf=0x3f3f3f3f;
    /*** TEMPLATE CODE * * STARTS HERE ***/
    int n,k;
    int a[1000][1000];
    int main()
    {
        cin>>n>>k;
        if(n*n<k)
        {
            printf("-1
    ");
    
        }else
        {
    //        for(int i=1;i<=n;i++)
    //        {
    //            if(k>0)
    //            {
    //                k--;
    //                a[i][i]=1;
    //            }
    //        }
            repd(i,1,n)
            {
                repd(j,1,n)
                {
                    if(a[i][j]==0)
                    {
                        if(i==j)
                        {
                            if(k>0)
                            {
                                k--;
                                a[i][j]=1;
                            }
                            continue;
                        }
                        if(k>1)
                        {
                            a[i][j]=1;
                            a[j][i]=1;
                            k-=2;
                        }
                    }
                }
            }
            repd(i,1,n)
            {
                repd(j,1,n)
                {
                    cout<<a[i][j]<<" ";
                }
                cout<<endl;
            }
    
        }
        return 0;
    }
    
    inline void getInt(int* p) {
        char ch;
        do {
            ch = getchar();
        } while (ch == ' ' || ch == '
    ');
        if (ch == '-') {
            *p = -(getchar() - '0');
            while ((ch = getchar()) >= '0' && ch <= '9') {
                *p = *p * 10 - ch + '0';
            }
        }
        else {
            *p = ch - '0';
            while ((ch = getchar()) >= '0' && ch <= '9') {
                *p = *p * 10 + ch - '0';
            }
        }
    }

    本博客为本人原创,如需转载,请必须声明博客的源地址。 本人博客地址为:www.cnblogs.com/qieqiemin/ 希望所写的文章对您有帮助。
  • 相关阅读:
    当程序员的那些狗日日子
    程序员常犯的几个错误
    我没有帮你的义务,却有拒绝你的权力
    并发 并行 同步 异步 多线程的区别
    cookie的存取
    sqlserver 处理百万级以上的数据处理与优化
    为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
    详细解析 nginx uri 如何匹配 location 规则
    mysql innodb 从 ibd 文件恢复表数据
    mysql 从 frm 文件恢复 table 表结构的3种方法
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/10240176.html
Copyright © 2020-2023  润新知