日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【题解】洛谷P2114 [NOI2014]起床困难综合症

發布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【题解】洛谷P2114 [NOI2014]起床困难综合症 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前往:我自己搭建的博客

題目

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

題解

題意簡化為:在0~m之間找一個數,使得這個數在一系列操作后最大。

由于原數有大小限制,又要使得到的數盡量大,為了充分地利用限制,就需要按位從高到低貪心,確定原數是選0還是選1。如果可以使得到的數為1,則盡量選,同時要考慮原數限制,還要使原數盡量小。

需要記錄每一位為0或1時,在經過操作后會變成什么。只要用一個全0數和一個全1數整體操作即可,最后一位位取出來。

代碼

#include <bits/stdc++.h> using namespace std; typedef long long ll; int n,m,a0,a1,t,ans,st; char ch[5]; inline void get_ans() {for(int i=30;i>=1;i--) //st是原數 {int cur=1<<(i-1); //cur只有第i位為1 if(a0&cur) ans+=cur; //優先考慮原數為0 else if(a1&cur&&st+cur<=m) ans+=cur,st+=cur;} //若得到的數必為0,則原數默認為0 } int main() {scanf("%d%d",&n,&m);a0=0; a1=(1<<30)-1;for(int i=1;i<=n;i++){scanf("%s%d",ch,&t);if(ch[0]=='A') a0&=t,a1&=t;else if(ch[0]=='O') a0|=t,a1|=t;else a0^=t,a1^=t;}get_ans();printf("%d\n",ans);return 0; }

總結

以上是生活随笔為你收集整理的【题解】洛谷P2114 [NOI2014]起床困难综合症的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。