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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

起床困难综合症 NOI2014

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

這道題簡單題意就是從0到m選一個數,進行n此操作,使得操作完的數最大。

這道題可以很暴力想到O(nm)的做法,枚舉每個0到m的數進行n次操作后的值進行取最大值?

但數據范圍明顯過不去,所以我們要優化一下

首先這些操作都是位運算,是在二進制下對每一位的操作。

因為二進制下每一位都相對獨立,并且每一位只有0和1兩種情況,所以我們從高位到低位枚舉0或1(保證最優解最大),找出能得到最優解的x(0<=x<=m)

對于每一位枚舉的0/1共有4種情況,

(ans為記錄最優解大小,kkk記錄x的大小)

當枚舉為0時,

1.操作后為0時不用管它

2.操作后為1時ans累加

當枚舉為1時

1.操作后為0時不管

2.操作后為1時且kkk加上這個二進制當前位的大小小于m時 kkk和ans累加。

?

#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define ll long long using namespace std; const int maxn=1000000+101010; inline int read(){int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-'0';return x*f; }int n,m; struct wzq{int x,y; }a[maxn]; int main(){n=read();m=read();int kk=0,kkk=0;for(int i=1;i<=n;i++){char b[30];scanf("%s%d",b,&a[i].y);if(b[0]=='A')a[i].x=1;if(b[0]=='O')a[i].x=2;if(b[0]=='X')a[i].x=3;}for(int i=30;i>=0;i--){int t=1<<i,k=0;for(int j=1;j<=n;j++){if(a[j].x==1)t=t&a[j].y,k=k&a[j].y;if(a[j].x==2)t=t|a[j].y,k=k|a[j].y;if(a[j].x==3)t=t^a[j].y,k=k^a[j].y;}if(k&(1<<i))kk+=(1<<i);else if(t&(1<<i)){if(kkk+(1<<i)>m)continue;kkk+=(1<<i);kk+=(1<<i);}}printf("%d",kk);return 0; } /* 10 AND 5 OR 6 XOR 7 */

?

轉載于:https://www.cnblogs.com/wzq--boke/p/9734778.html

總結

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

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