首页 > 其他分享 >CF1917E-构造

CF1917E-构造

时间:2024-04-09 17:26:29浏览次数:21  
标签:10 rep bmod 构造 times 偶数 CF1917E

link:https://codeforces.com/contest/1917/problem/E
给定 \(n,k\),保证 \(n\) 是偶数,需要构造一个 \(n\times n\) 的01矩阵,满足一共有 \(k\) 个1,且每行每列1的个数的奇偶性相同。给出构造或断定不存在方案。


\(n\) 是偶数意味着 \(k\) 必然是偶数(不管每行是奇还是偶数个1,最终总和必然是偶数)

因此首先排除 \(k\) 奇数的情况。

\(k\) 是偶数时,想一个很美妙的事情,放一个 \(2\times 2\) 的全 \(1\) 的格子总是可以保持奇偶性不变的,而 \(n\) 又是偶数,因此如果 \(k\bmod 4=0\) 我们也做完了。

然后考虑 \(k\bmod 4=2\) ,\(k=2\) 无解(对于corner case可以枚举几种可能的情况判断确实无解),\(k=n^2-2\) 是对称的也是无解,否则 \(k=6\) 是能构造出来的(此时意味着 \(n\) 至少是 \(4\)):

1 1 0 0
1 0 1 0
0 1 1 0
0 0 0 0

而 \(k=10\) 和 \(k=6\) 又是对称的,\(k=14\) 对于 \(4\times 4\) 的情形来说和 \(k=2\) 别无二致,是无解的。

因此到这里可以确定做法了:

  • k是奇数无解
  • k是2或 \(n^2-2\) 无解
  • 否则,如果 \(k\bmod 4=2\),判断 \(k\bmod 16\) 的结果,如果是 \(6\) 则按照上面的方式构造一个,否则如果是 \(2,10,14\) 的话:若 \(k\bmod 16=2\),但 \(k\neq 2\),所以 \(k\) 至少是 \(18\),可以先减掉 \(10\) 个,对 \(10,14\) 同理,此时可以先按照 \(k=10\) 的 \(4\times 4\) 的矩阵构造一个10个1的部分。
  • 剩下的情况, \(k\bmod 4=0\),全部按照 \(2\times 2\) 的填1来构造即可。实现的时候注意到上面 \(4\times 4\) 的构造方案中,四个 \(2\times 2\) 小格子都必然至少有一个数字,因此可以用这种方式来判断,简化代码实现。
// LUOGU_RID: 154445332
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define endl '\n'
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const int N=1005;
int n,k,a[N][N];
bool work(){
    cin>>n>>k;
    rep(i,1,n)rep(j,1,n)a[i][j]=0;
    if(k&1)return false;
    else{
        if(k==2||k==n*n-2){
            if(n==2){
                a[1][1]=a[2][2]=1;
                return true;
            }else return false;
        }else{
            if(k%4==2){
                int x=n-3,y=n-3;
                if(k%16==6){
                    a[x][y]=a[x+1][y]=a[x][y+1]=a[x+1][y+2]=a[x+2][y+1]=a[x+2][y+2]=1;
                    k-=6;
                }else{
                    rep(i,x,x+3)rep(j,y,y+3)a[i][j]=1;
                    a[x][y]=a[x+1][y]=a[x][y+1]=a[x+1][y+2]=a[x+2][y+1]=a[x+2][y+2]=0;
                    k-=10;
                }
            }
            for(int i=1;i<=n&&k;i+=2)for(int j=1;j<=n&&k;j+=2){
                bool ok=true;
                rep(x,0,1)rep(y,0,1)if(a[i+x][j+y])ok=false;
                if(!ok)continue;
                rep(x,0,1)rep(y,0,1)a[i+x][j+y]=1;
                k-=4;
            }
        }
    }
    return true;
}
int main(){
    fastio;
    int tc;cin>>tc;
    while(tc--){
        if(!work())cout<<"No"<<endl;
        else{
            cout<<"Yes"<<endl;
            rep(i,1,n){
                rep(j,1,n)cout<<a[i][j]<<' ';
                cout<<endl;
            }
        }
    }
    return 0;
}

标签:10,rep,bmod,构造,times,偶数,CF1917E
From: https://www.cnblogs.com/yoshinow2001/p/18124367

相关文章

  • CF911F-构造、树直径
    link:https://codeforces.com/contest/911/problem/F给一棵树,你需要进行若干次操作:选择两个叶子,把他们的距离加入得分,删掉其中一个叶子。希望让最终得分最大。构造方案。删叶子,距离最大,考虑树的直径很明显用树的直径不会让答案更劣(一棵树可能有多个直径,但直径的中心是唯一的,在......
  • 3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类
    1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。默认成员函数是一种特殊成员函数:​......
  • CF1943C-构造、树直径
    link:https://codeforces.com/contest/1943/problem/C题意:给一棵树,初始所有点为白色,每次操作可以选一个点\(v\),和一个距离\(d\),表示将所有距离点\(v\)恰好\(d\)的点染成黑色,问最少需要几次操作让树全黑,给出操作序列。树、二分图、黑白染色一条链怎么做?\(s_1,\dots,s_n\)......
  • Java8-类和对象、封装、构造方法
    目录类和对象类和对象的理解类的理解类的组成类和对象的关系类的定义类是由属性和行为两部分组成类的定义步骤:对象的使用创建对象的格式:调用成员的格式:练习对象内存图单个对象内存图多个对象内存图成员变量和局部变量封装思想封装概述封装代码实现private......
  • 2024年4月8日-UE5-开始菜单、事件分发器、UI预构造
    做个简单的菜单在主页面这里新建一个地图,按CTRL+N 把地面复制过来在开始关卡新建一个摄像机 打开关卡蓝图,先左键选中摄像机,然后在关卡蓝图里点右键,把摄像机拖下来   在UI里新建一个用户控件 再新建一个通用按钮 打开按钮的控件蓝图拖一个按钮进来 然......
  • 干簧管的工作原理、构造、分类和应用
    文章目录1.干簧管的工作原理2.干簧管的构造和分类2.1构造2.2分类3.干簧管的应用4.干簧管的优缺点大家好,我是记得诚。今天来聊一聊干簧管,其应用非常广泛。1.干簧管的工作原理干簧管是一个电子开关,也叫磁簧开关(ReedSwitch),是一个通过所施加的......
  • C++中的类与对象丶this指针和构造函数与析构函数 (一)
    C++中的类与对象和this指针(一)一丶类与对象1.类的引入2.类的实例化3.类的类型的大小I.计算类或对象的大小II.规定空类占一个字节大小4.类中的访问权限5.类中的构造函数和析构函数I.构造函数II.析构函数二丶this指针1.this指针的引出2.this指针的特性3.th......
  • 2024年4月7日-UE5-丰富怪物,结构体、数据表格、构造函数
    打开游戏基础文件夹,新建一个结构  打开后,新建一些变量,这里要看你的怪物用的皮肤是材质还是材质实例,选择不同的   然后再新建一个数据表格   打开怪物表填写一些怪物数据  打开怪物总类蓝图,打开构造函数ConstructionScript这个是预构造,游戏启动之前......
  • 人工智能,应该如何测试?(三)数据构造与性能测试篇
    前言人工智能场景中的性能测试与我们在互联网中创建到的有很大的不同,因为它需要模拟更复杂的情况。当然它也有相似的地方,只不过今天我们主要介绍它们不同的地方。产品分类首先我们需要澄清一下,从AI产品的类型来划分的话,我们可以分成两个大的类别:人工智能的业务类产品:AI就......
  • 18天【代码随想录算法训练营34期】● 513.找树左下角的值 ● 112. 路径总和 113.路径
    513.找树左下角的值#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deffindBottomLeftValue(self......