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

116.飞行员兄弟

116.飞行员兄弟

注释部分是调试中用的部分,忘了void change(int k, vector<PII> &res)中的&导致答案一直为空

#include <iostream>
#include <vector>
#include <string>
#include <cstring>using namespace std;typedef pair<int, int> PII;
const int MAX_OP = 1 << 16;
int a[4][4], backup[4][4];void change(int k, vector<PII> &res)
{int x = k / 4, y = k % 4;for (int i = 0; i < 4; i ++ ){backup[x][i] ^= 1;backup[i][y] ^= 1;}backup[x][y] ^= 1;// for (int i = 0; i < 4; i ++ )// {   //     for (int j = 0; j < 4; j ++ )//         cout << backup[i][j] << " ";//     cout << endl;// }// cout << endl;res.push_back({x, y});// for (auto p : res)// {//     cout << p.first << " " << p.second << endl;// }return;
}int main()
{// 读入for (int i = 0; i < 4; i ++ ){string line;cin >> line;for (int j = 0; j < 4; j ++ ){if (line[j] == '+') a[i][j] ^= 1;}}// for (int i = 0; i < 4; i ++ )// {   //     for (int j = 0; j < 4; j ++ )//         cout << a[i][j] << " ";//     cout << endl;// }// cout << endl;// memcpy(backup, a, sizeof a);// vector<PII> res;// change(0, res);// change(2, res);// change(3, res);// change(12, res);// change(14, res);// change(15, res);// 处理vector<PII> res;for (int op = 0; op < MAX_OP; op ++ ){memcpy(backup, a, sizeof a);// if (op == 13499) cout << "13499" << endl;// for (int i = 0; i < 4; i ++ )// {   //     for (int j = 0; j < 4; j ++ )//         cout << backup[i][j] << " ";//     cout << endl;// }// cout << endl;vector<PII> tmp;for (int k = 0; k < 16; k ++ ){if (op >> k & 1) change(k, tmp);}bool flag = true;for (int i = 0; i < 4; i ++ )for (int j = 0; j < 4; j ++ ){if (backup[i][j] == 1) flag = false;}// for (auto p : tmp)// {//     cout << p.first << " " << p.second << endl;// }if (flag && (res.empty() || res.size() > tmp.size())) res = tmp;}// 输出cout << res.size() << endl;for (auto p : res){cout << p.first + 1 << " " << p.second + 1 << endl;}return 0;
}/*
1234
1234
1234
12342^16*/

y总代码

抄的时候把if (k >> i & 1)抄成if (k >> 1 & 1)导致答案为空

y总通过state变量的二进制记录了16个位置的开关情况,用change记录了如果改变(i,j)时,要改变的情况,比如

改变1,1

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

1,2,3,4,5,9,13都要改变

用0001000100011111记录,=1相当于取反,就是动一下开关,=0,就是不动

now记录了改变后的state也就是当前所有灯光开关情况,都为0,也就是now = 0,也就是达到了要求

#include <iostream>
#include <vector>
using namespace std;const int MAX_OP = 1 << 16;
int change[4][4];typedef pair<int, int> PII;int get(int x, int y)
{return x * 4 + y;
}int main()
{int state = 0;for (int i = 0; i < 4; i ++ ){string line;cin >> line;for (int j = 0; j < 4; j ++ )if (line[j] == '+') state += 1 << get(i, j);}for (int i = 0; i < 4; i ++ )for (int j = 0; j < 4; j ++ ){for (int k = 0; k < 4; k ++ ){change[i][j] += 1 << get(i, k);change[i][j] += 1 << get(k, j);}change[i][j] -= 1 << get(i, j);}vector<PII> res;for (int k = 0; k < MAX_OP; k ++ ){int now = state;vector<PII> path;for (int i = 0; i < 16; i ++ ){if (k >> i & 1){int x = i / 4, y = i % 4;now ^= change[x][y];path.push_back({x, y});}}// cout << path.size() << endl;if (!now && (res.empty() || res.size() > path.size())) res = path;}cout << res.size() << endl;for (auto p : res) cout << p.first + 1 << " " << p.second + 1 << endl;return 0;
}
http://www.hskmm.com/?act=detail&tid=19086

相关文章:

  • 2025系统门窗品牌推荐榜单发布,吉缘等一线品质品牌隔音节能实力解析
  • 课程总结(作业2)
  • 旅游管理虚拟仿真实训室:打通理论与实践壁垒 - 详解
  • 【光照】[PBR][漫反射]实现方法对比
  • Xpath 提取数据
  • Java异常以及处理
  • 复习计划
  • RTC
  • 卡特兰数与反射容斥
  • 题解:QOJ9619/洛谷13568 [CCPC 2024 重庆站] 乘积,欧拉函数,求和(数论+状压DP)
  • Momentum Gradient Descent(动量梯度下降)
  • README
  • Halcon算子——2D几何变换
  • 深入解析:深度解析 CUDA-QX 0.4 加速 QEC 与求解器库
  • 实验作业1
  • 《C++程序设计》笔记p4 - 指南
  • 电脑显示器黑屏(闪烁:隔几秒中黑一两秒),向日葵远程正常——DeepSeek问答
  • 实用指南:iOS 26 兼容测试实战,机型兼容、SwiftUI 兼容性改动
  • 大中午记梦
  • 概率/期望 $dp$
  • 9.21~9.27 周总结
  • Jetbrains 全家桶激活码激活
  • 【深度学习计算机视觉】07:单发多框检测(SSD) - 指南
  • MZOI 2025.9.27
  • 原码 反码 补码
  • Spring Framework 远程命令执行漏洞
  • 配置本地环境以管理Git多账户SSH连接
  • Pod、 PVC 、PV的
  • 百度网盘ByPy使用配置指南
  • 完整教程:AI 术语通俗词典:Diffusion Models(扩散模型)