(思維)洛谷 P13551 ももいろの鍵 題解

題意

愛莉給了你一個非負整數 nnn,你需要把 0,1,2,…,n0, 1, 2, \dots, n0,1,2,,n 劃分成若干組,滿足每一組的按位與為 000

劃分的組不需要相鄰。

你需要最大化劃分組數并給出方案。

1≤T≤6001 \le T \le 6001T6000≤n≤1050 \le n \le 10^50n105,保證單個測試點內 nnn 的和不超過 2×1052 \times 10^52×105

思路

閑著沒事去看了兩眼,題目越簡潔,看著越嚇人,做法越要思考。實在沒想到這個只有黃的 T3,不過挺好玩的。

打表樣例可見,每一組似乎都不超過 2 個。不妨就構造兩個兩個一組的答案,可能會多出一個 000,理論上可以得到 ?n+12?\left \lceil \dfrac{n+1}{2} \right \rceil?2n+1?? 組。

考慮怎么樣得到兩個數與起來為 000,需要二進制每一位要么相反要么均為 000

假若有一個數 2x=(100...000)22^x=(100...000)_22x=(100...000)2?,其中 000xxx 個,另一個數 2x?1=(11...111)22^x-1=(11...111)_22x?1=(11...111)2?,其中 111 也有 xxx 個;這二者與起來為 000,而若前者一直 +1+1+1,后者一直 ?1-1?1,兩個數按位與起來總是為 000。為什么呢?每次 +1+1+1 或者 ?1-1?1,要么只改變末尾,要么發生進位改變高位——進位可能改變連續的高位。但是各位在初始狀態總是相反,所以兩個數同時改變各位依舊相反。

那么可以這樣構造:找到小于 nnn 的最大 2x2^x2x,將 n~2xn\sim 2^xn2x 加進隊列,然后從 2x2^x2x2x?12^x-12x?1 依次向大和向小枚舉配對;設后者配對到 pospospos,當前者配對到 nnn 就停下,然后向隊列中增補 2x?1~pos?12^{x-1}\sim pos-12x?1pos?1,下一輪繼續遍歷到 pos?1pos-1pos?1 ……——如果還沒配對到 nnnpospospos 就到了 2x?12^{x-1}2x?1 怎么辦?此時 2x?1>pos?12^{x-1}>pos-12x?1>pos?1,可以直接忽略進隊列的操作,繼續把隊列里剩下的元素配對玩再說,根據上面的結論來看這時可行的。

最后看隊列有沒有剩下的,如果 nnn 為奇數隊列中將會剩下一個,此時讓其和 000 配對;否則 000 自成一組。

講得有點口胡了。具體細節見代碼。

代碼

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T,n;
ll p2[22];
void init()
{p2[0]=1;for(int i=1;i<=20;i++)p2[i]=p2[i-1]*2;
}
queue<ll>q;
void clean()
{while(!q.empty())q.pop();
}
int main()
{scanf("%lld",&T);init();while(T--){clean();scanf("%lld",&n);if(n==0){puts("1");puts("1 0");continue;}printf("%lld\n",(n+2)/2);ll x=upper_bound(p2+1,p2+21,n)-p2-1;for(int i=p2[x];i<=n;i++)q.push(i);for(int i=x-1;i>=0;i--){ll pos=p2[i+1]-1;while(!q.empty()&&pos>=p2[i]){printf("2 %lld %lld\n",pos,q.front());pos--;q.pop();}for(int j=p2[i];j<=pos;j++)q.push(j);}if(!q.empty())printf("2 0 %lld\n",q.front());else puts("1 0");}return 0;
}

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

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

相關文章

記錄一次ESP32報錯Guru Meditation Error: Core 1 panic‘ed (Double exception).

一、問題描述 需求&#xff1a; ESP32S3單片機&#xff0c;連接一個麥克風讀取5s后&#xff0c;編碼后發送到百度云進行語音識別。通過freertos框架&#xff0c;將任務放在核1中運行&#xff08;放在核0同樣報錯&#xff09; 問題&#xff1a; 在最后的發送語音數據中&#xff…

半導體物理復習

半導體物理導論第一章 半導體的電子狀態

vi/vim跳轉到指定行命令

在 vi/vim 中跳轉到指定行有多種高效方法&#xff0c;以下是最常用的操作方式&#xff1a; 一、基礎跳轉&#xff1a;行號 命令命令模式下直接輸入行號 按 Esc 切換到命令模式后&#xff0c;輸入 :行號 并回車。例如&#xff0c;輸入 :100 會直接跳轉到第 100 行。使用 G 快捷…

智能落地扇方案:青稞RISC-V電機 MCU一覽

在科技飛速發展的今天&#xff0c;智能家居已成為人們生活中不可或缺的一部分&#xff0c;而風扇作為夏日解暑的必備家電&#xff0c;其智能化升級也成為了行業發展的必然趨勢。傳統落地扇功能單一、操作不便&#xff0c;已難以滿足現代消費者對便捷、舒適、節能生活的追求。在…

SQL 中 WHERE 與 HAVING 的用法詳解:分組聚合場景下的混用指南

SQL中WHERE與HAVING的用法詳解&#xff1a;分組聚合場景下的混用指南 1. WHERE與HAVING的基本區別 在SQL查詢中&#xff0c;WHERE和HAVING都是用于過濾數據的子句&#xff0c;但它們的應用時機和作用對象有本質區別&#xff1a; WHERE子句&#xff1a;在分組前對原始數據進行過…

14 - 大語言模型 — 抽取式問答系統 “成長記”:靠 BERT 學本事,從文本里精準 “揪” 答案的全過程(呆瓜版-1號)

目錄 1、什么是問答系統&#xff1f; 2、問答系統的核心工作流程 2.1、理解問題&#xff1a;把問題 “翻譯” 成機器能懂的形式 2.2、 尋找答案&#xff1a;從信息中定位答案 2.3、生成答案&#xff1a;整理并輸出結果 2.4、優化迭代&#xff1a;讓系統更 “聰明” 3、主…

Docker一鍵部署輕量級Gitea倉庫

1、安裝docker 1、安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm22、配置docker yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3、安裝docker yum install -y docker-ce4、修改docker配置文…

2025年滲透測試面試題總結-2025年HW(護網面試) 81(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年HW(護網面試) 81 一、Webshell獲取路徑規劃 二、變形注入突破技巧 三、MySQL寫入Webshell條件矩陣 …

8.1IO進程線程——文件IO函數

文章目錄一、思維導圖二、使用文件IO函數&#xff0c;實現文件的拷貝myhead.h代碼現象三、使用標準IO函數&#xff0c;實現圖片的拷貝代碼現象四、使用文件IO函數&#xff0c;計算文件的大小代碼現象五、牛客網刷題一、思維導圖 二、使用文件IO函數&#xff0c;實現文件的拷貝 …

xerces-c-src_2_8_0 arm_linux編譯

xerces-c-src_2_8_0 ARM LINUX 編譯 文章借鑒&#xff1a;https://bbs.csdn.net/topics/250017321 export XERCESCROOT/xxxx/xerces-c-src_2_8_0 1 下載地址https://archive.apache.org/dist/xerces/c/sources/xerces-c-src_2_8_0.tar.gz&#xff1a;xerces-c-src_2_8_0.tar…

20250729使用WPS打開xlsx格式的電子表格時候隱藏顯示fx的編輯欄的方法

20250729使用WPS打開xlsx格式的電子表格時候隱藏顯示fx的編輯欄的方法 2025/7/29 9:44緣起&#xff1a;視圖→編輯欄 截屏的時候&#xff0c;顯示fx的編輯欄 占用空間了&#xff0c;很討厭。 想辦法拿掉&#xff01;

springboot當中ConfigurationProperties注解作用跟數據庫存入有啥區別

在Spring Boot中&#xff0c;ConfigurationProperties注解用于將外部配置文件&#xff08;如application.properties或application.yml&#xff09;中的屬性映射到Java對象中。這種方式使得配置管理更加靈活和集中。而將配置信息存入數據庫則是另一種管理應用程序配置的方式。這…

JVM指針壓縮的那些事

什么是指針壓縮&#xff1f;指針壓縮&#xff08;Compressed Ordinary Object Pointers&#xff0c;簡稱Compressed OOPs&#xff09;是JVM在64位平臺上的一種內存優化技術&#xff0c;它將64位的對象引用壓縮為32位&#xff0c;從而減少內存占用并提升性能。為什么需要指針壓縮…

【數據結構初階】--排序(一):直接插入排序,希爾排序

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

Hive SQL (HQL) 編輯指南

Hive SQL&#xff08;HQL&#xff09;是基于Hive的數據倉庫查詢語言&#xff0c;語法類似標準SQL&#xff0c;但因Hive的離線大數據處理特性&#xff0c;存在一些特有規則和最佳實踐。以下是Hive SQL的編輯指南&#xff0c;涵蓋核心語法、注意事項和優化技巧&#xff1a; 一、H…

力扣熱題100--------240.搜索二維矩陣

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例 1&#xff1a;輸入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24…

【pytest高階】-2- 內置hook插件擴展機制和定制開發

一、可愛版 pytest 插件 & hook 知識大禮包 &#x1f381;準備好和 pytest 插件來一場可愛約會了嗎&#xff5e; 咱們用超甜的 emoji 把知識串成棉花糖&#x1f361; 一口一個知識點&#xff01;一、 pytest 插件&#xff1a;框架的 “魔法百寶箱” &#x1f9d9;?♀?1. …

博創軟件數智通OA平臺:高效協同,安全辦公新選擇

在數字化轉型浪潮下&#xff0c;企業對于辦公自動化系統的需求日益迫切。博創軟件&#xff0c;作為協同辦公領域的佼佼者&#xff0c;憑借其卓越的技術實力和豐富的行業經驗&#xff0c;推出了數智通OA平臺&#xff0c;為企業提供了一個高效、安全、便捷的辦公解決方案。博創軟…

AI coding匯總持續更新

代碼編輯器 當然了&#xff0c;用代碼編輯器這個概念太泛了&#xff0c;更多的是指AI代碼編輯器&#xff0c;有自動補全&#xff0c;ai寫代碼功能的產品。 cursor WindSurf Trae jetbrains全家桶 比如&#xff1a;IntelliJ IDEA雖然很優秀&#xff0c;但是有種感覺&#xff0c;…

Yolo底層原理學習--(第二篇)

一&#xff0c;IOU置信度與非極大值抑制NMS在第一篇文章中我們講到&#xff0c;對于一張圖片&#xff0c;在前向傳播的過程后&#xff08;也就是卷積&#xff0c;池化&#xff0c;全連接等等&#xff09;&#xff0c;會生成許許多多個預測框&#xff0c;那么怎么從這么多預測框…