pku 1753 Flip Game(高斯消元+枚举)

USACO section 3.4 Closed Fences(计算几何+叉积+二分) Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N corners (3 i, yi}, i in (1..N). Every pair of adjacent vertices defines a side of the fence. 阅读详情
Flip Game
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 20199 Accepted: 8752

Description

Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. Each round you flip 3 to 5 pieces, thus changing the color of their upper side from black to white and vice versa. The pieces to be flipped are chosen every round according to the following rules:
  1. Choose any one of the 16 pieces.
  2. Flip the chosen piece and also all adjacent pieces to the left, to the right, to the top, and to the bottom of the chosen piece (if there are any).

Consider the following position as an example:

bwbw
wwww
bbwb
bwwb
Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up. If we choose to flip the 1st piece from the 3rd row (this choice is shown at the picture), then the field will become:

bwbw
bwww
wwwb
wwwb
The goal of the game is to flip either all pieces white side up or all pieces black side up. You are to write a program that will search for the minimum number of rounds needed to achieve this goal.

Input

The input consists of 4 lines with 4 characters "w" or "b" each that denote game field position.

Output

Write to the output file a single integer number - the minimum number of rounds needed to achieve the goal of the game from the given position. If the goal is initially achieved, then write 0. If it's impossible to achieve the goal, then write the word "Impossible" (without quotes).

Sample Input

bwwb
bbwb
bwwb
bwww

Sample Output

4

Source

 
编程错误点:原先只管最后的值异或而错,还有max_ans未赋初值0
 
#include<iostream>
#include<cstring>
using namespace std;
const int mm=937;
const int oo=1e9;
int map[mm][mm+1],b[mm][mm+1];
int ans[mm];
int var,equ;
int max_ans;
void debug();
void swap(int&a,int &b)
{
  int tmp;tmp=a;a=b;b=tmp;
}
/*
int abs(int x)
{
  if(x<0)return -x;return x;
}*/
int gcd(int a,int b)
{
  int t;
  while(b!=0)
  {
    t=b;b=a%b;a=t;
  }return a;
}
int lcm(int a,int b)
{
  return a*b/gcd(a,b);
}
void dfs(int z,int dep,int k,int kans)
{
  ans[var-dep]=z;
  if(dep==k)
  {
    for(int i=var-k-1;i>=0;i--)
    {
    int tmp;
    tmp=map[i][var]%2;
    for(int j=i+1;j<var;j++)
    if(map[i][j])
    tmp=(tmp-(map[i][j]*ans[j])%2+2)%2;
    ans[i]=(tmp/map[i][i])%2;if(ans[i])++kans;
    }
    if(kans<max_ans)max_ans=kans;
    //cout<<"ans="<<kans<<endl;
  }
  else
  {
     dfs(1,dep+1,k,kans+1);dfs(0,dep+1,k,kans);
  }
}
int Guss()
{
  int k,col;max_ans=0;
  for(k=0,col=0;k<equ&&col<var;k++,col++)
  {/**行变换消元*/
    int max_i=k;
    for(int i=k+1;i<equ;i++)
    if(map[i][col]>map[max_i][col])max_i=i;
    if(max_i!=k)
    {//for(int i=k;i<var+1;i++)好像也OK
      for(int i=col;i<var+1;i++)//是K不是col因为k--;
      swap(map[k][i],map[max_i][i]);
    }
    /**除去对角线0,列变换*/
for(int i = 0; i <equ; ++i)//每一行主元素化为非零
if(!map[i][i])
{
int j;
for(j = i+1;j<var;++j)
if(map[i][j])
break;
if(j == var)
break;
for(int kk = 0;kk < equ; ++kk)
swap(map[kk][i],map[kk][j]);
}
/**遇到对角线0,k退1*/
    if(map[k][col]==0)
    {
      k--;continue;
    }
    /**消元*/
    for(int i=k+1;i<equ;i++)
    if(map[i][col]!=0)
     {
      int LCM=lcm(map[k][col],map[i][col]);
      int ta,tb;
      ta=LCM/map[i][col];tb=LCM/map[k][col];
      if(map[i][col]*map[k][col]<0)tb=-tb;
      for(int j=col;j<var+1;j++)
      {
        map[i][j]=((map[i][j]*ta)%2-(map[k][j]*tb)%2+2)%2;
      }
     }
    // cout<<"k="<<k<<endl;
  }
  //debug();
  ///判断回代
  for(int i=k;i<equ;i++)
  if(map[i][col])return -1;
  if(var==k)
  for(int i=k-1;i>=0;i--)
  {
    int tmp;
    tmp=map[i][var]%2;
    for(int j=i+1;j<var;j++)
    if(map[i][j])
    tmp=(tmp-(map[i][j]*ans[j])%2+2)%2;
    ans[i]=(tmp/map[i][i])%2;if(ans[i])max_ans++;
  }
  else
  {    max_ans=oo;
      dfs(1,1,var-k,1);dfs(0,1,var-k,0);
  }
  return 0;
}
void debug()
{
  for(int i=0;i<var;i++)
  {for(int j=0;j<var+1;j++)
  cout<<map[i][j];
  cout<<"\n";
  }
}
int main()
{
  int num;
  char s;
  int k_ans=oo;
  memset(map,0,sizeof(map));
  memset(ans,0,sizeof(ans));
    num=4;
    var=equ=num*num;
    for(int i=0;i<num;i++)
    {
      for(int j=0;j<num;j++)
      {  map[i*num+j][i*num+j]=1;
        if(i!=0)map[i*num+j][(i-1)*num+j]=1;
        if(j!=0)map[i*num+j][i*num+j-1]=1;
        if(i!=num-1)map[i*num+j][(i+1)*num+j]=1;
        if(j!=num-1)map[i*num+j][i*num+j+1]=1;
        cin>>s;
        if(s=='b')map[i*num+j][var]=0;
        else map[i*num+j][var]=1;
        //cout<<map[i*num+j][var];
        //cout<<"i="<<i<<"j="<<j<<endl;
      }
    }
    for(int i=0;i<var;i++)
    {for(int j=0;j<var;j++)
     b[i][j]=map[i][j];
     b[i][var]=map[i][var]^1;
    }
    //debug();
     /*for(int i=0;i<var;i++)
    {for(int j=0;j<var;j++)
     cout<<b[i][j];
     cout<<b[i][var]<<"\n";
    }*/
    int flag=Guss();
    if(flag!=-1&&max_ans<k_ans)
    k_ans=max_ans;
    for(int i=0;i<var;i++)
    {for(int j=0;j<var;j++)
     map[i][j]=b[i][j];
     map[i][var]=b[i][var];
    }
    flag=Guss();
    if(flag!=-1&&max_ans<k_ans)
    k_ans=max_ans;
    if(k_ans==oo)cout<<"Impossible\n";
    else
    {
      cout<<k_ans<<"\n";
    }
}

CrewAI 多 Agent 实战包 v1(Mock免Key跑通+通义千问可选+流水线样例) 本资源是 CrewAI 风格多 Agent 可运行工程包:研究→写作→审校等流水线样例。无 API Key 时自动降级 Mock 引擎跑通;有 DASHSCOPE_API_KEY 时可接真实 CrewAI + 通义千问。含中文 README、samples、smoke 留档、单元测试。本包不含密钥。关联博客:https://blog.csdn.net/mtl1994 立即下载

相关推荐

市场销售总监年终汇报必备PPT.pptx

市场销售总监年终汇报必备PPT

pku 1681 Painter's Problem(高斯消元)

Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3462   Accepted: 1710 Description There is a square wall which is made of n*n small square br

nealgavin的专栏 1951

半桥LLC谐振变换器开环+闭环仿真设计资料(Simulink仿真实现)

内容概要:本文档系统性地介绍了半桥LLC谐振变换器的开环与闭环仿真设计方法,基于Simulink平台构建完整的仿真模型,涵盖系统建模、关键参数设计、控制策略实现及动态性能验证全过程。重点阐述了LLC谐振变换器的工作原理、谐振腔参数(Lr、Cr、Lm)的优化设计方法、零电压开关(ZVS)与零电流开关(ZCS)等软开关技术的实现机制,并深入探讨电压/电流双闭环控制策略,特别是恒压恒流双竞争控制逻辑的切换机制与稳定性保障。资料配套提供完整的仿真模型、详细说明文档及参考文献,有助于全面掌握其在启停过程、负载突变等工况下的动态响应特性与系统鲁棒性调控方法。; 适合人群:具备电力电子技术基础理论知识和Simulink仿真操作能力的高校研究生、科研机构研究人员,以及从事高频高效开关电源、新能源汽车车载充电机(OBC)、充电桩电源、数据中心供电等领域的工程技术人员。; 使用场景及目标:① 掌握LLC谐振变换器在实际工程中的精确建模与仿真分析流程;② 深入理解并独立实现从开环频率调制到闭环反馈控制的平滑切换逻辑;③ 应用于高效率DC-DC变换器、电动汽车充电系统、可再生能源并网电源等场景下的控制系统设计与性能优化; 阅读建议:建议结合所提供的仿真模型进行分步调试与参数扫描实验,重点关注控制器带宽设计、谐振元件参数匹配对效率的影响以及系统上电过程中的软启动策略设计,同时推荐对比学习全桥LLC、CLLC等衍生拓扑的相关资料,以建立完整的谐振变换器控制体系认知。

hdu 1250 Hat's Fibonacci

Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3726    Accepted Submission(s): 1252 Problem Description A Fibonacci se

nealgavin的专栏 1251

SOP 配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)

内容概要:本文围绕基于SOP(Soft Open Point)的配电网故障重构方法展开研究,采用IEEE33节点标准配电系统作为仿真测试平台,利用Matlab进行代码实现与仿真验证。研究重点在于通过SOP这一柔性电力电子装置实现故障后网络拓扑的快速重构,提升供电恢复能力与系统可靠性。文中详细阐述了故障重构的数学建模过程,结合优化算法实现负荷转供与孤岛划分的协同决策,在保证辐射状运行约束的前提下,最大限度恢复失电负荷,并降低网络损耗。该方法充分体现了SOP在主动配电网中的灵活调控优势,为现代智能配电网的自愈控制提供了有效技术路径。; 适合人群:电气工程及相关专业的高校研究生、从事配电网自动化与智能电网研究的科研人员,以及具备一定Matlab编程基础和电力系统分析背景的研发技术人员。; 使用场景及目标:① 掌握基于SOP的配电网故障恢复机制与重构策略设计;② 学习如何在Matlab环境下构建IEEE33节点系统模型并实现故障重构算法;③ 深入理解含分布式电源与柔性装置的主动配电网优化运行方法; 阅读建议:建议结合电力系统分析基础知识,重点关注SOP的建模方式、故障重构的优化目标与约束条件设定,并动手实践Matlab代码以加深对算法流程和仿真结果的理解。

芯片低功耗设计的两种常用EDA流程

如题。

EricWZY2008的专栏 5557

nefu702 The minimum square sum(数论)

The minimum square sum Time Limit 1000ms Memory Limit 65536K description   Given a prime p (p8),you are to find min{x2+y2},where x and y belongs t

nealgavin的专栏 1244

STM32 USB AUDIO实战指南——从零构建音频设备

本文详细介绍了如何使用STM32F407构建USB音频设备,从硬件准备到软件配置,再到音频播放和录制功能的实现。通过STM32CubeMX配置和实战代码示例,帮助开发者快速掌握USB Audio Class规范,实现低延迟、高质量的音频传输,适用于语音交互、音乐播放等多种场景。

weixin_42549037的博客 484

CF-60D - Savior(并查集+数论)

D - Savior Time Limit:4000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 60D Description Misha decided to help Pasha and Akim be fri

nealgavin的专栏 1197

Stata实战:RCS限制立方样条非线性关系建模与P值解读全攻略

本文详细介绍了在Stata中使用RCS限制立方样条进行非线性关系建模的全过程,包括数据准备、节点设置、COX回归模型构建、结果可视化及P值解读。通过乳腺癌临床数据实例,展示了如何捕捉年龄与死亡风险之间的复杂非线性关系,并提供了实用的Stata代码和图形优化技巧。

weixin_30650039的博客 472

COMSOL仿真分析高压直流GIS/GIL绝缘性能优化

高压直流气体绝缘设备(GIS/GIL)的绝缘性能是保障电网可靠运行的关键。通过COMSOL Multiphysics多物理场仿真,可以深入分析气固界面电场分布与电荷积聚机理。该技术结合静电场、热场和电荷传输耦合计算,能准确模拟温度梯度对SF6气体与环氧树脂界面特性的影响。工程实践中,这类仿真可优化导体结构设计、改进绝缘材料配方,并建立电场-温度关联预警模型。特别是在80℃高温工况下,仿真显示界面电荷密度会显著增加23%,这对设备安全运行具有重要指导价值。

weixin_32075843的博客 192

CF-50E-Square Equation Roots(数论)

E - Square Equation Roots Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 50E Description A schoolboy Petya studies sq

nealgavin的专栏 1107

datax web升级springboot3 jdk17

datax web但GitHub上还是springboot2,没有升级过,最近扫漏洞发现spring-core漏洞必须升级到6.x才能解决,这时不得不将springboot升级到3.x,随之而来是jdk、mybatis-plus等等的升级,调整了几天才没问题,痛苦的开发人生~~以上,有疑问欢迎留言。

liyinglong1023的博客 973

hdu 4357 String change(推理题,4级)

String change Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 802    Accepted Submission(s): 370 Problem Description In this proble

nealgavin的专栏 1010

静态与动态LACP链路聚合:原理、配置与排错实战指南

链路聚合技术是提升网络带宽与可靠性的核心方案,通过将多个物理端口逻辑捆绑,实现带宽叠加与链路冗余。其原理基于IEEE 802.3ad标准,通过负载均衡算法将数据流分布到不同物理链路,既避免了数据包乱序,又提升了整体吞吐量。该技术的核心价值在于消除单端口瓶颈、提供毫秒级故障切换,并能简化网络拓扑管理。在企业服务器接入、数据中心互联及虚拟化平台等场景中,链路聚合已成为构建高可用网络的基础。实践中,动态LACP模式通过协议报文协商,能主动检测链路故障并防止配置错误导致的网络环路,相比静态聚合更为可靠。本文将深入解

weixin_31412781的博客 267

电流采样电路设计:差分放大与ADC采集详解

在电机控制、电源管理、电池监测等应用中,电流采样是一个关键环节。通常,我们使用小阻值的采样电阻将电流信号转换为电压信号,再通过运放放大后送入ADC进行采集。本文将详细分析一种基于差分放大器的电流采样电路,包括信号放大、参考电压偏置、滤波保护以及ADC转换计算等内容。

W0s477的博客 2万+

USACO section 4.1 Beef McNuggets(数论+背包)

Beef McNuggets Hubert Chen Farmer Brown's cows are up in arms, having heard that McDonalds is considering the introduction of a new product: Beef McNuggets. The cows are trying to find any possibl

nealgavin的专栏 987

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

港科大livox_camera_calib虽然操作方便,但是使用mid360雷达会有视角问题(投影三维点到相机),尝试了很多场景,标定效果都不理想(推荐场景是楼梯间),看来港大的更适合avia之类窄角度的雷达。如果标定效果不好的话,就使用 getExt2节点,getExt1节点只优化外参,而getExt2节点在计算的时候会将一开始计算的内参作为初值和外参一起优化。一般使用getExt1节点即可,如果在外参初值验证过,并且异常值已经剔除后,优化还是有较大的残差,那么可以使用getExt2试一试。

z1872385的博客 2399

LS 38 Geometric sum(数论+二分快速幂)

Geometric sum Compute (a+a2+…an)modm. Input Three integers a,n,m. (1≤a,n,m≤1018) Output The only integer denotes the result. Sample input 2 2 1000000000 Sample output 6

nealgavin的专栏 979

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu 4465 Candy(概率公式+极大乘极小,4级)

Candy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1016    Accepted Submission(s): 449 Special Judge Problem Description LazyChil

nealgavin的专栏 954

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hdu 1042 N!

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 33314    Accepted Submission(s): 9234 Problem Description                Given an in

nealgavin的专栏 926

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

CF 17D - Notepad(数论取模+欧拉函数)

D - Notepad Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 17D Description Nick is attracted by everything unconventio

nealgavin的专栏 900

素数判断(数论)

素数判定 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 8   Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← →

nealgavin的专栏 895

hdu 3117 Fibonacci Numbers

Fibonacci Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 993    Accepted Submission(s): 424 Problem Description The Fibonacci

nealgavin的专栏 845
上一篇: pku 1681 Painter's Problem(高斯消元)
下一篇: USACO section 2.3 Longest Prefix(dp)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值