[LOJ 6030] 「雅礼集训 2017 Day1」矩阵

题意

给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解输出 -1.

\(n \le 1000\).

题解

首先手玩下样例就可以发现一个非常虾皮的明显性质: 因为操作是赋值而不是取或, 于是一定是先让某一行都为 1 然后用这一行去染所有不是全 1 的列.

对于构造一个全 1 的行, 如果行号为 \(k\), 那么显然是用某一行的第 \(k\) 列上的 1 去染第 \(k\) 行. 如果初始状态恰好不存在任何一行的第 \(k\) 列上有 1, 那么我们可以把任意一个有 1 的行覆盖到第 \(k\) 列, 那么就存在某一行的第 \(k\) 列上是 1 了.

这个过程中我们发现, 只要初始状态中有 1 就一定有合法方案.

那么我们只要枚举行号 \(k\) 钦定它来完成染掉所有列的任务, 然后计算出让它全 1 的最少步数. 如果存在某一行的第 \(k\) 列是 1 那么答案直接就是第 \(k\) 行 0 的个数, 否则需要一步让某一行的第 \(k\) 列是 1, 于是等于 0 的个数 \(+1\).

然后剩下的就沙雕了, 算一算初始状态中有多少列不是全 1 就行了.

所以这题复杂度瓶颈其实是读入

参考代码

  1. #include <bits/stdc++.h>
  2. namespace rvalue{
  3. const int MAXN=1010;
  4. int n;
  5. int cntx[MAXN];
  6. int cnty[MAXN];
  7. char a[MAXN][MAXN];
  8. int main(){
  9. scanf("%d",&n);
  10. bool valid=false;
  11. for(int i=1;i<=n;i++){
  12. scanf("%s",a[i]+1);
  13. for(int j=1;j<=n;j++){
  14. if(a[i][j]=='#'){
  15. valid=true;
  16. ++cntx[i];
  17. ++cnty[j];
  18. }
  19. }
  20. }
  21. if(!valid)
  22. puts("-1");
  23. else{
  24. int ans=n;
  25. for(int i=1;i<=n;i++)
  26. if(cnty[i])
  27. ans=std::min(ans,n-cntx[i]);
  28. else
  29. ans=std::min(ans,n-cntx[i]+1);
  30. for(int i=1;i<=n;i++)
  31. if(cnty[i]!=n)
  32. ++ans;
  33. printf("%d\n",ans);
  34. }
  35. return 0;
  36. }
  37. }
  38. int main(){
  39. rvalue::main();
  40. return 0;
  41. }

[LOJ 6030]「雅礼集训 2017 Day1」矩阵的更多相关文章

  1. loj#6030. 「雅礼集训 2017 Day1」矩阵(贪心 构造)

    题意 链接 Sol 自己都不知道自己怎么做出来的系列 不难观察出几个性质: 最优策略一定是先把某一行弄黑,然后再用这一行去覆盖不是全黑的列 无解当且仅当无黑色.否则第一个黑色所在的行\(i\)可以先把 ...

  2. LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵

    https://loj.ac/problem/6030 如果矩阵第i列有一个黑色, 那可以用他把第i行全都染黑,也可以使任意一列具有黑色 然后就可以用第i行把矩阵染黑 染黑一列的代价最少是1 染黑一行 ...

  3. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  4. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  5. loj 6031「雅礼集训 2017 Day1」字符串

    loj 注意到每次询问串长度都是给定的,并且询问串长\(k*\)询问次数\(q<10^5\),所以这里面一个东西大的时候另一个东西就小,那么考虑对较小的下功夫 如果\(k\le \sqrt{n} ...

  6. loj#6031. 「雅礼集训 2017 Day1」字符串(SAM 广义SAM 数据分治)

    题意 链接 Sol \(10^5\)次询问每次询问\(10^5\)个区间..这种题第一感觉就是根号/数据分治的模型. \(K\)是个定值这个很关键. 考虑\(K\)比较小的情况,可以直接暴力建SAM, ...

  7. loj#6029. 「雅礼集训 2017 Day1」市场(线段树)

    题意 链接 Sol 势能分析. 除法是不能打标记的,所以只能暴力递归.这里我们加一个剪枝:如果区间内最大最小值的改变量都相同的话,就变成区间减. 这样复杂度是\((n + mlogn) logV\)的 ...

  8. LOJ #6029. 「雅礼集训 2017 Day1」市场 线段树维护区间除法

    题目描述 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落. 有 \(n\) 个商贩,从\(0 \sim n - 1\) 编号,每个商 ...

  9. loj6030 「雅礼集训 2017 Day1」矩阵

    传送门:https://loj.ac/problem/6030 [题解] 以下把白称为0,黑称为1. 发现只有全空才是无解,否则考虑构造. 每一列,只要有0的格子都需要被赋值1次,所以设有x列有含有0 ...

随机推荐

  1. 使用Unicode字符实现换行

    要让inline元素换行可以使用Unicode字符实现: <!DOCTYPE html> <html lang="en"> <head> < ...

  2. Entity framework 6.0 简明教程 ef6

    http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx Ef好的教程 Entity Fra ...

  3. Java基本数据类型总结(转载)

    Java基本数据类型总结 基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量 ...

  4. Java基础——可变参数

    大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型.我试了试,并调用了一些弹出来的方法. public class ClassC2 { public static vo ...

  5. Mac下,(OS系统)IDEA 逆向工程,生成 hibernate 映射文件以及对应的javaBean(类似于eclipse)

    找了好久,逆向工程生成javabean的,在Macbook的OS系统下使用idea生成. 参考博客:http://m.blog.csdn.net/quan20111992/article/detail ...

  6. 【Java基础】5、java中的匿名内部类

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:使用匿名内部类来实现抽象方 ...

  7. github小白上传本地代码及更新代码到GitHub及华为云教程

    上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> ...

  8. Java static和final

    java提高篇(七)-----关键字static static 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静 ...

  9. java - 线程等待与唤醒

    Java多线程系列--“基础篇”05之 线程等待与唤醒 概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. w ...

  10. HDU6152

    Friend-Graph Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...