flip game

news/2025/2/19 7:43:28/

https://ac.nowcoder.com/acm/problem/235250
思路:将每一行的数据看成一个二进制串,可以发现如果想要达成相同的颜色,由第一行的操作可以确定接下来所有行的操作,因此我们可以枚举第一行所有可能的操作,由于 m 比较小,外层循环只需要枚举 2^m -1,时间不会爆。在具体操作时采用二进制,用 a 数组和 b 数组将两个相反的棋盘存入,这样只需将两个数组跑同一个函数即可。

#include<bits/stdc++.h>
#define endl '\n'
#define pii pair<int,int>using namespace std;const int maxn = 10+3;int n,m;int a[maxn],b[maxn];
int change[maxn];int transform(int x)
{int ans=0;  while(x){if(x&1){ans++;}x>>=1;}return ans;
}int cal(string s,bool sig)
{int ans=0;int len=s.length();for(int i=0;i<len;i++){if(sig)ans |= (s[i]-'0')<<(len-i-1);else ans |= (!(s[i]-'0'))<<(len-i-1);}return ans;
}int deal(int a[])
{int ans=0x7f7f7f;int cur[maxn],cnt=0; // 新开一个数组临时存储每个change[0]修改后的状态for(change[1]=0;change[1]<=(1<<m)-1;change[1]++){cnt=transform(change[1]);// change 修改正对着的格子,左边的格子,右边的格子cur[1]=a[1]^change[1]^(change[1]>>1)^((change[1]<<1)&((1<<m)-1)); // 修改 change 对应的下一行的格子cur[2]=a[2]^change[1];for(int i=2;i<=n;i++){cnt+=transform(change[i]);change[i]=cur[i-1]; // 当前行怎么按cur[i]=cur[i]^change[i]^(change[i]>>1)^((change[i]<<1)&((1<<m)-1));cur[i+1]=a[i+1]^change[i];}if(cur[n]==0) {ans=min(ans,cnt);}}return ans;
}void solve()
{cin>>n>>m;string s;for(int i=1;i<=n;i++){cin>>s;a[i]=cal(s,1);b[i]=cal(s,0);}int ans=min(deal(a),deal(b));cout<<ans<<endl;
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; T=1;while(T--) solve();return 0;
}

http://www.ppmy.cn/news/1571908.html

相关文章

自建 Redis 中设置 ACL 用户和权限

一、概述 在自建的 Redis 中实现类似于云 Redis 的账号权限管理&#xff0c;可以使用 Redis 6.0 及以上版本的 ACL&#xff08;Access Control List&#xff09; 功能来进行权限管理。Redis 的 ACL 允许创建不同的用户&#xff0c;指定其权限&#xff0c;从而控制用户可以执行哪…

spring启动加载顺序及原理

Spring的启动加载顺序及原理是Spring框架的核心内容之一&#xff0c;它确保了应用程序的各个组件能够按照预期的顺序进行初始化和配置。虽然无法直接结合https://www.51969.com/网站的具体内容&#xff08;因为该网站主要是一个优惠券和商品推荐平台&#xff0c;与Spring的技术…

凸包算法—— cad c#二次开发

效果如下&#xff1a; 代码如下&#xff1a; using IfoxDemo; //[assembly: CommandClass(typeof(IFoxDemo.凸包class))]//只允许此类快捷键命令 namespace IFoxDemo {public class 凸包class{public static class 凸包助手{/// <summary>/// 计算点集的凸包并返回多段线…

Logistic Regression 逻辑回归中的sigmoid函数是什么?

Sigmoid函数是一种在数学、计算机科学,尤其是在机器学习和深度学习领域广泛应用的函数,以下是关于它的详细介绍: 定义与公式 Sigmoid函数的数学表达式为: S ( x ) = 1 1 + e − x S(x)=\frac{1}{1 + e^{-x}} S(x)=1+e−x1​,其中 x x x 可以是一个实数、向量或矩阵。当 …

【Java 面试 八股文】Redis篇

Redis 1. 什么是缓存穿透&#xff1f;怎么解决&#xff1f;2. 你能介绍一下布隆过滤器吗&#xff1f;3. 什么是缓存击穿&#xff1f;怎么解决&#xff1f;4. 什么是缓存雪崩&#xff1f;怎么解决&#xff1f;5. redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&…

【pytest】获取所有用例名称并存于数据库

数据库操作包&#xff0c;引用前面创建的py文件&#xff0c;【sqlite】python操作sqlite3&#xff08;含测试&#xff09; #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-11 8:45 # Author : duxiaowei # File : get_filename.py # Software: 这个文…

Django:构建高效Web应用的强大框架

在当今快速发展的Web开发领域&#xff0c;选择一个合适的框架对于项目的成功至关重要。Django&#xff0c;作为一个用Python编写的高级Web框架&#xff0c;凭借其强大的功能、灵活性和可扩展性&#xff0c;成为了众多开发者的首选。本文将深入探讨Django的特点、优势以及如何利…

css: 针对属性left/right/top/bottom为啥设置transition动画不起作用

如题&#xff1a; 在css的position中 left/right/top/bottom 这类位置属性值如果考虑使用transition来添加动画&#xff0c;transition它会优先考虑left/top属性&#xff0c;而此时transition触发需要的是数值型属性&#xff0c;如果设置为auto则系统会默认不考虑将位置属性添加…