位運算練習:起床困難綜合征(貪心,位運算)(算法競賽進階指南學習筆記)

目錄

    • 前情提要
    • 起床困難綜合征(貪心,位運算)

前情提要

一些基礎運算操作用法看看上一篇;

起床困難綜合征(貪心,位運算)

題目原文

[P2114 NOI2014] 起床困難綜合癥 - 洛谷

思路分析

題目很長,意思是讓我們在[0,m]之間選一個數x,在經過給定的n次運算后,使最后的結果an盡可能的大;

最簡單的思路可是枚舉1~m的所有數,最后找到最大的那個數就是所求的答案;但是m的范圍去到了109所以會超時不能過所有的點;

因為給出的操作都是位運算所以不難想到這題需要利用位運算去模擬;在這里就用到了位、位運算在二進制數表示下不用進位的特點;所以我們選取的數x時參與運算的各個位置上的數之間都是獨立的互不影響的;所以我們就可以去利用貪心的思想;從最高位遍歷到在低位;依次考慮每一位上去填幾;

用二進制數去模擬只用一次判斷每一位上的情況即可;枚舉所有m的情況,m取到109相當于229左右,所以在二進制下最多29位;大大縮短了時間;

比如在x的第i位時:

  • 已經填好的更高位構成的數加上1<<i后不超過m并且用每個操作時的數的第i位和x的第i位運算過后不改變第i為上原本的值(操作前后相等);此時我們就可以在an的第i位上填上1;
  • 如果不滿足上面的情況,就說明填1可能會超過m的范圍或者不如0更優;所以就填0;
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define fi first
#define se second
const int N=1e7;
pair <string,int> a[N];
int n,m;
int f(int w,int x){ // 位數,當前位的數for(int i=1;i<=n;i++){ // n組操作int c=a[i].se>>w&1; // 把每個操作對應的數的對應位上的數截出來if(a[i].fi[0]=='A')x&=c;if(a[i].fi[0]=='O')x|=c;if(a[i].fi[0]=='X')x^=c;}return x;
}
signed main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i].fi>>a[i].se; // 先將操作存起來int val=0,an=0; // 當前的值,和答案值for(int i=29;i>=0;i--){ // 枚舉所有m的情況,m取到10的9次方,在二進制下最多29位int x0=f(i,0); // 這一位是0時操作后的值int x1=f(i,1); // 這一位是1時操作后的值if(val+(1<<i)<=m&&x0<x1) // 不超m,并且1比0大val+=1<<i,an+=x1<<i; // 就選1作為這一位elsean+=x0<<i; // 反之選0}cout<<an;
} 

當然在這里也可以進行簡化;

初始兩個變量一個全為0(也就是0)一個全為1(也就是 -1 因為二進制數的第一位表示符號,所以要想全是1那就取-1就好了 )去進行題目給出的操作;

其實就是把上面

int x0=f(i,0); // 這一位是0時操作后的值
int x1=f(i,1); // 這一位是1時操作后的值

這一部分給提前處理了;最后貪心的時候還需要每一位分開看;

最后得到兩個結果;貪心時就能用0換1就換,能用1換1也換,不能換不換就好了;

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N=1e7;
signed main(){int n,m;cin>>n>>m;int x=0,y=-1; // 初始兩個全1和全0的狀態while(n--){string a;cin>>a;int c;cin>>c;if(a[0]=='A')x&=c,y&=c;if(a[0]=='O')x|=c,y|=c;if(a[0]=='X')x^=c,y^=c;}int an=0;for(int i=29;i>=0;i--){ // 枚舉每一位上的情況,貪心的思路與上面類似if(x>>i&1)			// 這里是不能填0的情況就變成1an+=1<<i; else if(y>>i&1&&(1<<i)<=m)an+=1<<i,m-=1<<i; // 直接在m上面減就不用在設立val變量}cout<<an<<endl;
} 

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

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

相關文章

PowerBi中REMOVEFILTERS怎么使用?

在 Power BI 的 DAX 中&#xff0c;REMOVEFILTERS() 是一個非常重要的函數&#xff0c;常用于取消某個字段或表的篩選上下文&#xff08;Filter Context&#xff09;&#xff0c;從而讓你的計算不受切片器&#xff08;Slicer&#xff09;、篩選器或視覺對象的限制。 ? 一、REM…

Vue3 實戰:打造多功能旅游攻略選項卡頁面

在旅游類應用開發中&#xff0c;為用戶提供全面、直觀的信息展示界面至關重要。本文將分享如何基于 Vue3 Axios 技術棧&#xff0c;實現一個包含攻略、游記、問答三大板塊的旅游攻略選項卡頁面&#xff0c;從樣式設計到交互邏輯&#xff0c;帶你深入了解整個開發過程。 項目背…

JavaScript性能優化實戰(1):性能優化基礎與性能分析工具

性能優化的重要性與業務價值 在當今競爭激烈的互聯網環境中,網站和應用的性能已成為用戶體驗和業務成功的關鍵因素。研究表明,頁面加載時間每增加1秒,轉化率可能下降7%,而53%的用戶會在頁面加載時間超過3秒后放棄訪問。這些數據直接揭示了性能優化對業務的巨大影響: 用戶…

Unity 腳本使用(二)——UnityEngine.AI——NavMesh

描述 Singleton class 用于訪問被烘培好的 NavMesh. 使用NavMesh類可以執行空間查詢&#xff08;spatial queries&#xff09;&#xff0c;例如路徑查找和可步行性測試。此類還允許您設置特定區域類型的尋路成本&#xff0c;并調整尋路和避免的全局行為。 靜態屬性&#xff0…

Java 靜態內部類面試題與高質量答案合集

本文整理了關于 Java 靜態內部類&#xff08;Static Nested Class&#xff09;在面試中的高頻問題及標準答案&#xff0c;幫助你理解其底層原理、內存表現以及實際應用。 1. 什么是靜態內部類&#xff1f;和普通內部類有什么區別&#xff1f; 答&#xff1a; 靜態內部類是定義…

為什么買不到一定阻抗特性曲線的磁環

為什么買不到一定阻抗特性曲線的磁環&#xff1a; 磁環繞不同的圈數&#xff0c;阻抗特性曲線不同&#xff0c;磁環沒有類似于磁珠的特定頻率和阻抗特性曲線的磁環。 磁環與磁珠的核心區別&#xff1a; 磁珠是一種固定頻率阻抗器件&#xff0c;出廠時已通過材料和工藝設計確定…

【MATLAB海洋專題】歷史匯總

【MATLAB海洋專題】歷史匯總 目錄 01&#xff1a;海洋專題進階教學 02&#xff1a;海洋數據處理 03&#xff1a;海洋數據下載 04&#xff1a;海洋配色 05&#xff1a;海洋專題基礎教學 06: 其他基礎畫圖 07&#xff1a;python 畫海圖專題 08&#xff1a;模式相關文件制作 01…

數據倉庫ODS、DWD、DWS、ADS各層介紹

數據倉庫Data warehouse&#xff08;可簡寫為DW或者DWH&#xff09;建設的目的&#xff0c;是為前端查詢和分析作為基礎&#xff0c;主要應用于OLAP&#xff08;on-line Analytical Processing&#xff09;&#xff0c;支持復雜的分析操作&#xff0c;側重決策支持&#xff0c;…

動態提示詞(小模型)、RAG和提示詞系統

動態提示詞(小模型)、RAG和提示詞系統 目錄 動態提示詞(小模型)、RAG和提示詞系統小模型方案:動態提示詞基于規則的動態提示詞生成基于模板的動態提示詞生成基于小模型的動態提示詞生成基于強化學習的動態提示詞生成基于元學習的動態提示詞生成動態提示詞(小模型)RAG(檢…

并發設計模式實戰系列(3):工作隊列

&#x1f31f; ?大家好&#xff0c;我是摘星&#xff01;? &#x1f31f; 今天為大家帶來的是并發設計模式實戰系列&#xff0c;第三章工作隊列&#xff08;Work Queue&#xff09;??&#xff0c;廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. 生產者-消費者架構 …

云賬號安全事件應急響應指南:應對來自中國IP的異常訪問

在當今數字化時代,云服務已成為企業IT基礎設施的核心。然而,隨之而來的安全挑戰也日益突出。本文將詳細介紹當發現云賬號被來自中國的IP地址異常利用時,應如何快速有效地響應,以確保賬戶安全并最小化潛在風險。 1. 確認異常活動 首先,我們需要確認是否真的發生了安全事件…

三網通電玩城平臺系統結構與源碼工程詳解(五):客戶端熱更機制與多端資源分發流程

本篇將聚焦三網通平臺在多客戶端部署中的資源熱更機制設計、跨平臺同步策略、版本控制與前端資源發布管理&#xff0c;幫助開發者搭建高效穩定的資源更新系統。 一、資源分發平臺架構 為實現安卓端、iOS端、PC端的統一更新分發&#xff0c;平臺采用 Node.js Express 構建資源…

spark和hadoop的區別

一、spark概述 二、處理速度 三、 編程模型 四、實時性處理 五、spark內置模塊 六、spark的運行模式

AI寫代碼之GO+Python寫個爬蟲系統

下面我們我們來利用AI&#xff0c;來用GOPython寫個爬蟲系統。 幫我寫一個Python語言爬取數據寫入Mysql的案例&#xff0c;信息如下&#xff1a; 1、Mysql數據庫地址是&#xff1a;192.168.1.20 &#xff0c;mysql用戶名是&#xff1a;root&#xff0c; Mysql密碼是&#xff1…

從單模態到多模態:深度生成模型的演進歷程

在人工智能領域&#xff0c;生成模型的發展一直是研究熱點。從最早的自編碼器到如今的多模態擴散模型&#xff0c;這一技術路線不斷突破&#xff0c;為創意內容生成、數據增強和表示學習等領域帶來革命性變化。本文將詳細介紹幾種關鍵生成模型的技術原理和演進路徑&#xff0c;…

【系統架構設計師】嵌入式微處理器

目錄 1. 說明2. 微處理器(MPU)3. 微控制器(MCU)4. 信號處理器(DSP)5. 圖形處理器(GPU)6. 片上系統(SoC)7. 例題7.1 例題1 1. 說明 1.嵌入式微處理器主要用于處理相關任務。2.由于嵌入式系統通常都在室外使用&#xff0c;可能處于不同環境&#xff0c;因此&#xff0c;選擇處理…

Cursor Free VIP 重置進程錯誤,輕松恢復使用!

快速修復 Cursor Free VIP 重置進程錯誤&#xff0c;輕松恢復使用&#xff01; 在使用 Cursor Free VIP 的過程中&#xff0c;突然遭遇 “重置進程錯誤” 是不是讓你手忙腳亂&#xff1f;當屏幕彈出 “文件未找到: C:\Users\用戶\AppData\Local\Programs\Cursor\resources\app…

dolphinscheduler實現(oracle-hdfs-doris)數據ETL

dolphinscheduler執行 完整腳本(自行替換相關變量)配置文件conf配置文件解析腳本轉base64腳本 完整腳本(自行替換相關變量) user_olsh conf/getInfo.sh Oracle user conf/databases.conf password_olsh conf/getInfo.sh Oracle password conf/databases.conf dblink_olsh conf…

小小矩陣設計

在電氣設計圖中&#xff0c;矩陣設計的接線方法是通過結構化布局實現多靈活鏈接的技術&#xff0c;常用于信號切換、配電調壓或更加復雜的控制場景。 今天聊一種在電氣圖紙中用到的一種簡單矩陣接法&#xff0c;一眼就看明白&#xff0c;很大程度簡化了程序控制點和繼電器的使用…

【音視頻】FFmpeg解封裝

解封裝 復用器&#xff0c;比如MP4/FLV 解復用器&#xff0c;MP4/FLV 封裝格式相關函數 avformat_alloc_context(); 負責申請一個AVFormatContext結構的內存,并進行簡單初始化avformat_free_context(); 釋放該結構里的所有東西以及該結構本身avformat_close_input();關閉解復…