算法題(128):費解的開關

審題:
本題需要我們將多組測試用例中拉燈數小于等于6的最小拉燈數輸出,若拉燈數最小值仍大于6,則輸出-1

思路:
方法一:二進制枚舉

首先我們先分析一下基本特性:

1.所有的燈不可能重復拉:若拉的數為偶數,相當于沒拉,這會憑空讓拉燈數加n,不符合我們找最小拉燈數的需求。若拉的數為非1奇數,同理,我們可以直接拉一次達到同樣的效果,沒必要多拉那幾次

2.拉燈先后順序無影響:因為拉燈事件是相互獨立的,且拉燈最后作用在燈上就是變換次數,所以無論先拉哪個燈,最終每個燈被拉的次數不會變,最終狀態也就不會變

3.確定了第一行的拉燈情況就可以確定下一行的拉燈情況:若我們確定了第一行如何拉燈,那么為了使所有燈都處于亮的狀態,第二行的目的就是使第一行燈保持全亮,第三行的目的就是讓第二行全亮,以此類推,可以知道剩下的拉燈方法

然后我們分析一下具體的實現方法:
1.第一步:將燈的情況看成二進制數,并將其反著存到數組a中,也就是說我們的最終目的就轉換成將燈弄成全滅

ps:二進制的位與數組索引對齊,第0位在最左側

2.第二步:二進制枚舉拉燈的方法,二進制中的1表示拉燈,0表示不拉燈

3.第三步:計算當前拉燈所需拉的次數并記錄在count變量中

4.第四步:計算當前行燈按完后的結果以及下一行按完后的結果

5.第五步:求出下一行的按法

6.第六步:若a[4] == 0,則維護最小拉燈數answer

解題:

#include<iostream>
#include<cstring>
using namespace std;
int n;
const int N = 10;
int a[N];//用二進制形式存儲初始狀態,二進制位數和索引對齊
int f[N];//備份a
int cal(int num)
{int cnt = 0;while (num){cnt++;num &= num - 1;}return cnt;
}
int main()
{cin >> n;while (n--){//多組測試,需要清空遺留痕跡memset(a, 0, sizeof a);//存儲初始數據for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){char ch;cin >> ch;if (ch == '0') a[i] |= (1 << j);//反著存儲:目標變為讓燈全滅}}//開始二進制枚舉int answer = 0x3f3f3f;for (int p = 0; p < (1 << 5); p++){memcpy(f, a, sizeof a);int push = p;int count = 0;for (int i = 0; i < 5; i++){count += cal(push);//求出當前行按完結果f[i] = f[i] ^ push ^ (push << 1) ^ (push >> 1);//清除高位污染f[i] &= (1 << 5) - 1;//求出下一行按完結果f[i + 1] = push^f[i+1];//求出下一行按法push = f[i];}if(f[4] == 0) answer = min(answer,count);}if (answer <= 6){cout << answer << endl;}else{cout << -1 << endl;}}return 0;
}

(1)f[N]數組的作用:備份數組a的情況,用于進行多次的二進制枚舉拉燈模擬

(2)存在多組數據需要判斷的時候我們一定要將全局變量的數組等痕跡清空,比如這里的數組a

(3)在存儲數據給a數組的時候:我們的目的是將值為0的位置變為值為1,所以在第j位為0的時候有a[i] |= (1 << j),會將a的第j位變為1

(4)cal的目的是計算出數據的二進制位有多少個1:核心邏輯就是每次進行循環都會將一個二進制位的1分解掉

(5)我們按燈其實就是要將當前行的被按燈本身以及其左,其右的0變為1,1變為0。而其實二進制運算中的異或可以剛好達成這個目的,因為對應位置為0/1和對應位置為1的值進行異或都會變。

而對于下一行則更簡單,只需要對被按位置改變即可

(6)下一行的按法怎么求?
由于我們的目的變為了讓燈全滅,所以上一行按完之后的值就是下一行的按法

P10449 費解的開關 - 洛谷

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76481.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MFC文件-屏幕錄像

下載本文件 本文件將獲取屏幕圖像數據的所有代碼整合到兩個文件中&#xff08;ScreenRecorder.h和ScreenRecorder.cpp&#xff09;&#xff0c;使獲取屏幕圖像數據變得簡單。輸出IYUV視頻流。還可以獲取系統播放的聲音&#xff0c;輸出PCM音頻流。由于使用了MFC類&#xff0c;本…

0801ajax_mock-網絡ajax請求1-react-仿低代碼平臺項目

0 vite配置proxy代理 vite.config.ts代碼如下圖所示&#xff1a; import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…

JVM筆記【一】java和Tomcat類加載機制

JVM筆記一java和Tomcat類加載機制 java和Tomcat類加載機制 Java類加載 * loadClass加載步驟類加載機制類加載器初始化過程雙親委派機制全盤負責委托機制類關系圖自定義類加載器打破雙親委派機制 Tomcat類加載器 * 為了解決以上問題&#xff0c;tomcat是如何實現類加載機制的…

IP編址(來自YESLAB新網工的筆記)

上層協議類型 概念&#xff1a;通常指的是位于網絡層&#xff08;如 IP 層&#xff09;以上的協議類型&#xff0c;這些協議在數據傳輸時需要由網絡層&#xff08;或更低層&#xff09;協議承載。以 IP 協議為例&#xff0c;IP 報文頭部中的 協議字段&#xff08;Protocol Fie…

SpringBoot學習(過濾器Filter。攔截器Interceptor。全局異常捕獲處理器GlobalExceptionHandler)(詳細使用教程)

目錄 一、過濾器Filter。 1.1定義與規范。 1.2工作原理與范圍。 1.3使用場景。 1.4 SpringBoot實現過濾器。&#xff08;Filter配置2種方式&#xff09; <1>注解配置(WebFilter、Order、ServletComponentScan)。 創建過濾器類。 啟用 Servlet 組件掃描。 <2>配置類…

c++題目_P1443 馬的遍歷

P1443 馬的遍歷 # P1443 馬的遍歷 ## 題目描述 有一個 $n \times m$ 的棋盤&#xff0c;在某個點 $(x, y)$ 上有一個馬&#xff0c;要求你計算出馬到達棋盤上任意一個點最少要走幾步。 ## 輸入格式 輸入只有一行四個整數&#xff0c;分別為 $n, m, x, y$。 ## 輸出格式 …

清華《數據挖掘算法與應用》K-means聚類算法

使用k均值聚類算法對表4.1中的數據進行聚類。代碼參考P281。 創建一個名為 testSet.txt 的文本文件&#xff0c;將以下內容復制粘貼進去保存即可&#xff1a; 0 0 1 2 3 1 8 8 9 10 10 7 表4.1 # -*- coding: utf-8 -*- """ Created on Thu Apr 17 16:59:58 …

HarmonyOS-ArkUI V2工具類:AppStorageV2:應用全局UI狀態存儲

AppStorageV2是一個能夠跨界面存儲數據,管理數據的類。開發者可以使用AppStorageV2來存儲全局UI狀態變量數據。它提供的是應用級的全局共享能力,開發者可以通過connect綁定同一個key,進行跨ability數據共享。 概述 AppStorageV2是一個單例,創建時間是應用UI啟動時。其目的…

打靶日記 zico2: 1

一、探測靶機IP&#xff08;進行信息收集&#xff09; 主機發現 arp-scan -lnmap -sS -sV -T5 -p- 192.168.10.20 -A二、進行目錄枚舉 發現dbadmin目錄下有個test_db.php 進入后發現是一個登錄界面&#xff0c;嘗試弱口令&#xff0c;結果是admin&#xff0c;一試就出 得到加…

使用Java基于Geotools的SLD文件編程式創建與磁盤生成實戰

前言 在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地圖的可視化呈現至關重要&#xff0c;而樣式定義語言&#xff08;SLD&#xff09;文件為地圖元素的樣式配置提供了強大的支持。SLD 能夠精確地定義地圖圖層中各類要素&#xff08;如點、線、面、文本等&#x…

kubernetes》》k8s》》Service

Kubernetes 中的 Service 是用于暴露應用服務的核心抽象&#xff0c;為 Pod 提供穩定的訪問入口、負載均衡和服務發現機制。Service在Kubernetes中代表了一組Pod的邏輯集合&#xff0c;通過創建一個Service&#xff0c;可以為一組具有相同功能的容器應用提供一個統一的入口地址…

【HDFS】EC重構過程中的校驗功能:DecodingValidator

一、動機 DecodingValidator是在HDFS-15759中引入的一個用于校驗EC數據重構正確性的組件。 先說下引入DecodingValidator的動機,據很多已知的ISSUE(如HDFS-14768, HDFS-15186, HDFS-15240,這些目前都已經fix了)反饋, EC在重構的時候可能會有各種各樣的問題,導致數據錯誤…

現代c++獲取linux系統架構

現代c獲取linux系統架構 前言一、使用命令獲取系統架構二、使用c代碼獲取系統架構三、驗證四、總結 前言 本文介紹一種使用c獲取linux系統架構的方法。 一、使用命令獲取系統架構 linux系統中可以使用arch或者uname -m命令來獲取當前系統架構&#xff0c;如下圖所示 archuna…

didFinishLaunching 與「主線程首次 idle」, 哪個是更優的啟動結束時間點 ?

結論先行 在這兩個候選時間點里—— application:didFinishLaunchingWithOptions: 執行結束主線程第一次進入 idle&#xff08;RunLoop kCFRunLoopBeforeWaiting&#xff09; 若你只能二選一&#xff0c;以「主線程首次 idle」作為 啟動結束 更合理。它比 didFinishLaunchin…

Vue3 + TypeScript中defineEmits 類型定義解析

TypeScript 中 Vue 3 的 defineEmits 函數的類型定義&#xff0c;用于聲明組件可以觸發的事件。以下是分步解釋&#xff1a; 1. 泛型定義 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定義允許的事件名稱集合&#xff0c;即組…

樹莓派超全系列教程文檔--(34)樹莓派配置GPIO

配置GPIO GPIO控制gpio 文章來源&#xff1a; http://raspberry.dns8844.cn/documentation 原文網址 GPIO控制 gpio 通過 gpio 指令&#xff0c;可以在啟動時將 GPIO 引腳設置為特定模式和值&#xff0c;而以前需要自定義 dt-blob.bin 文件。每一行都對一組引腳應用相同的設…

AladdinEdu(H卡GPU算力平臺)使用教程: 1)注冊與開通流程 2)插件使用流程

一、注冊與開通流程 首先進入AladdinEdu官網&#xff1a;AladdinEdu-同學們用得起的H卡算力平臺-高效做AI就上Aladdin 完成注冊&#xff0c;并進行學生認證&#xff1a;學生認證賬戶&#xff0c;認證期間享受教育優惠價。 登錄官網進入控制臺 二、插件使用流程 VScode中…

精益數據分析(6/126):深入理解精益分析的核心要點

精益數據分析&#xff08;6/126&#xff09;&#xff1a;深入理解精益分析的核心要點 在創業和數據驅動的時代浪潮中&#xff0c;我們都在不斷探索如何更好地利用數據推動業務發展。我希望通過和大家分享對《精益數據分析》的學習心得&#xff0c;一起在這個充滿挑戰和機遇的領…

2.深入剖析 Rust+Axum 類型安全路由系統

摘要 詳細解讀 RustAxum 路由系統的關鍵設計原理&#xff0c;涵蓋基于 Rust 類型系統的路由匹配機制、動態路徑參數與正則表達式驗證以及嵌套路由與模塊化組織等多種特性。 一、引言 在現代 Web 開發中&#xff0c;路由系統是構建 Web 應用的核心組件之一&#xff0c;它負責…

運籌學之模擬退火

目錄 一、歷史二、精髓思想三、案例與代碼實現 一、歷史 問&#xff1a;誰在什么時候提出模擬退火&#xff1f;答&#xff1a;模擬退火算法&#xff08;Simulated Annealing&#xff0c;SA&#xff09;是由斯圖爾特柯爾斯基&#xff08;Scott Kirkpatrick&#xff09; 等人在 …