当前位置: 首页 > news >正文

【题解】P7315 [COCI 2018/2019 #3] Sajam

性质的必然存在性.jpg

注意到题目给出了十分特殊的性质 \(\boldsymbol{k\le n}\),因此考虑从这个地方入手。

注意到当 \(k<n\) 时,根据抽屉原理可知必然存在一个全 \(0\) 行,因此考虑枚举该行,然后对于该行内每个 \(1\),翻转该位置对应的列。此时剩下的行要么翻转要么不翻转,且这些行均独立。因此设此时第 \(i\) 行有 \(d_i\)\(1\),那么最少需要执行 \(\sum\limits_{j\neq i}\min(d_j,n-d_j)\)\(i\) 表示枚举的是第 \(i\) 行全 \(0\)),容易发现这个东西可以用 bitset 优化到 \(O(\frac {n^3}{\omega})\)。列的情况同理。

\(k=n\) 时唯一的特殊情况是每一行每一列都有恰好一个 \(1\)。此时考虑枚举第一行 \(1\) 的位置,然后可以确定剩余位置全部为 \(0\),转化为第一种情况,同样可以用 bitset 优化到 \(O(\frac{n^3}{\omega})\)。因此本题得解,总时间复杂度为 \(O(\frac{n^3}{\omega})\) 可以通过。

代码十分好写。

// #pragma GCC optimize(3, "Ofast", "inline", "unroll-loops")
#include <bits/stdc++.h>
#define int long long
using namespace std;
using ld = long double;
const int N = 1010;
int f[N];
char s[N][N];
bitset<N> bit[N];
signed main()
{cin.tie(0)->sync_with_stdio(false);cout << fixed << setprecision(15);int n, k;cin >> n >> k;for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)cin >> s[i][j], bit[i - 1].set(j - 1, s[i][j] == 'o');if (n == k){for (int i = 1; i <= n; ++i){// s[1][i] = 1// s[1][j] = 0 (i != j)bit[0].flip(i - 1);int sum = 1;for (int j = 2; j <= n; ++j){int cnt = bitset(bit[0] ^ bit[j - 1]).count();sum += min(cnt, n - cnt);}if (sum <= k){cout << "DA\n";return 0;}bit[0].flip(i - 1);}for (int i = 1; i <= n; ++i){int sum = 0;for (int j = 1; j <= n; ++j)if (i != j){int cnt = bitset(bit[i - 1] ^ bit[j - 1]).count();sum += min(cnt, n - cnt);}if (sum <= k){cout << "DA\n";return 0;}}cout << "NE\n";}else{for (int i = 1; i <= n; ++i){int sum = 0;for (int j = 1; j <= n; ++j)if (i != j){int cnt = bitset(bit[i - 1] ^ bit[j - 1]).count();sum += min(cnt, n - cnt);}if (sum <= k){cout << "DA\n";return 0;}}cout << "NE\n";}return 0;
}
http://www.jsqmd.com/news/326946/

相关文章:

  • 使用Kivy开发跨平台的移动应用
  • 分布式系统C++实现
  • Pcdmis海克斯康三坐标脱机软件2013至2021 CAD++全功能 远程包安装
  • 异常安全编程指南
  • 编译器命令选项优化
  • C++中的组合模式实战
  • C++与量子计算模拟
  • 当极限学习机遇上猛禽:用天鹰算法调参实战
  • 【题解】CF1773G Game of Questions
  • 深度学习框架YOLO+DeepSeek农作物病虫害检测系统 结合DeepSeek、Qwen等大模型对检测结果给出相关建议,并可将检测报告导出为PDF文件。另外添加可视化界面对检测结果进行可视化显示。
  • 【题解】CF2085F2 Serval and Colorful Array (Hard Version)
  • 基于STM32和FreeRTOS的智能家居设计之路 - 指南
  • C++编译期数组操作
  • 【题解】P14561 [CXOI2025] 我常常追忆过去
  • C++中的享元模式变体
  • 深耕蚌埠 全域运营|三十六行蚌埠分公司解锁本地商户增长新路径
  • 高性能网络协议栈
  • 主频、带宽概念
  • 【题解】P10665 [AMPPZ2013] Bytehattan
  • 【题解】P14610 [NWRRC 2025] Keys and Grates
  • 低延迟系统C++优化
  • 【题解】AT_arc098_c [ARC098E] Range Minimum Queries
  • 【题解】P7974 [KSN2021] Delivering Balls
  • 动态库热加载技术
  • C++中的观察者模式变体
  • 备考锦囊:分享主治考试哪个老师讲得好,点亮通关智慧之光
  • 嵌入式C++安全编码
  • C++中的表达式模板
  • 浅谈莫队
  • 混合储能与并网控制:基于Matlab Simulink的蓄电池与超级电容混合储能系统仿真模型研究