題面:
給你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
先講講思路吧。易知最大情況是3,最小是1。情況是3的時候 即前後相差同樣的2^n倍;2的情況是單方面相差2 ^n;1的情況是除此之外。#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的情況吧:
首先我們需要建立乙個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個頁面,你需要設計乙...