位運算 set容器的結合

2021-09-29 08:08:38 字數 1128 閱讀 3067

題面:

給你2e5個數每個數大小[-1e9,1e9],從中取幾個數使得裡面的數兩兩相差的絕對值都為2的冪次方,我們稱這個集合為st集合。現在問最多取多少個數構成st集合,並輸出這些數。 比如給你5個數 : 5 2848 3 7 0 最多取5 3 7出來滿足條件,答案輸出3和5 3 7。 (具體輸出格式如樣例所示

example

input

63 5 4 7 10 12

output

37 3 5

input

5-1 2 5 8 11

output18

#include

#define ll long long

#define rep(i,a,n) for(int i=a;i<=n;i++)

#define per(i,n,a) for(int i=n;i>=a;i--)

#define endl '\n'

#define mem(a) memset(a,0,sizeof(a))

#define io ios::sync_with_stdio(false);cin.tie(0);

using

namespace std;

const

int inf=

0x3f3f3f3f

;const

int mod=

1e9+7;

set q;

intmain()

for(ll i=

1;i<=n;i++)}

}for

(ll i=

1;i<=n;i++)}

} cout<<

"1"<

}

先講講思路吧。易知最大情況是3,最小是1。情況是3的時候 即前後相差同樣的2^n倍;2的情況是單方面相差2 ^n;1的情況是除此之外。

先說說答案是3的情況吧:

首先我們需要建立乙個set集合(因為它自帶從小到大的排序功能,然後每次輸入a[i]就把它insert進去。然後開2次for迴圈來遍歷這些數,差值就是2^j,用.count()來查詢set裡的東西,一旦符合就ok啦!

集合運算 藍橋杯 set容器

給出兩個整數集合a b,求出他們的交集 並集以及b在a中的餘集。第一行為乙個整數n,表示集合a中的元素個數。第二行有n個互不相同的用空格隔開的整數,表示集合a中的元素。第三行為乙個整數m,表示集合b中的元素個數。第四行有m個互不相同的用空格隔開的整數,表示集合b中的元素。集合中的所有元素均為int範...

Set容器的使用

set容器只是單純鍵的集合,如果想知道乙個值是否存在時,使用set容器比較合適。set容器中的鍵也是唯一的,不能修改,且set容器不能使用下標操作。以下使用程式說明set容器的使用 定義 插入 獲取 等 include stdafx.h include include include using n...

set 容器的運用

簡單題 可以優先佇列 vector 但set容器更為簡單 題目描述 在學習operating system的過程中,glory遇到了這樣乙個問題,現在有乙個大小為可以容納n個頁面的記憶體,硬碟內的內容被分成m個頁面,用1 m來標識,一開始記憶體裡沒有任何頁面,接下來使用者會請求q個頁面,你需要設計乙...