羅区P2114は、コンピューティングビット得る窮迫症候群[] [貪欲]

トピックhttps://www.luogu.org/problemnew/show/P2114

問題の意味:それぞれが可能AND、OR、XORの数も、操作がnです。

初期値が0〜Mの間の数であり、最大値はQ、N、演算後、どのくらいを得ることができる経過しました。

アイデア:

この数は、0が1であるビットではありませんので、我々は操作1を行うための整数と整数nは0を使用することができます。次いで、この数を決定するために、各ビットは、リスト上の0又は1であるべきです。

ハイからローへの貪欲な始まり。0と1がより貪欲な選択のように比較的少数の後にあるため、選挙の1、その後、0を得ることができる場合。

1つの単語だけが、この数はメートルを超えないときに表示するために1対1を得ることができる場合。いいえ、これに複数の回答が1になることはできません。

1  // の#include <ビット/ STDC ++> 
2の#include <stdio.hの>
 3の#include <iostreamの>
 4の#include <アルゴリズム>
 5の#include <CStringの>
 6の#include <STDLIB.H>
 7の#include <キュー> 
 8の#include <地図>
 9の#include <スタック>
 10の#include < 設定 >
 11  
12  // の#define LL __int128 
13  の#define ULLのunsigned long長い
 14  の#define INF 0x7f7f7f7f 
 15  
16のtypedef 長い LL。
17  使って 名前空間はstd;
18  
19  のint N、M。
20   
21  
22  のint main()の
 23  {
 24      のscanf(" %D%dの"、&​​N、&M)。
25      INT allone = 0x7FFFFFFFで、allzero = 0 26      のためにint型 I = 0 ; iがN <; Iは++ ){
 27          チャー OP [ 10 ]。
28          int型のT;
29          GETCHAR()。
30          のscanf(" %sの%D"OP& T)、
 31          であれば(のstrcmp(OP、" AND ")== 0 ){
 32              allone&= T;
 33              allzero&= T;
 34          }
 35          そう であれば(のstrcmp(OP、" OR ) == 0 ){
 36              allone | = T;
 37              allzero | = T;
 38          }
 39          {
 40              allone ^ = T;
 41             allzero ^ = T;
42          }
 43      }   
 44      INT ANS = 0、T = 0 45      のためには、int型私は= 30、I> = 0 ; i-- ){
 46          であれば(allzero&(1 << I)){
 47の              ANS | =(1つの << I)。
48          }
 49          そう であれば(allone&(1 << I)&& M> =(T |(1 << I))){
 50の              ANS | =(1 << I)。
51              T | =(1 << I)。
52          }
 53      }
 54      のprintf(" %d個の\ n " 、ANS)。
55      リターン 0 ; 
56 }

 

おすすめ

転載: www.cnblogs.com/wyboooo/p/10975331.html