B2460 BeiJing2011 元素 線性基

2022-03-13 05:43:58 字數 2149 閱讀 9371

這個題是對剛才線性基的乙個補充,就是中間有一些小貪心,貪心就很有意思,先按權值排序,然後就瞎搞就行了.

題幹:

description

相傳,在遠古時期,位於西方大陸的 magic land 上,人們已經掌握了用魔

法礦石煉製法杖的技術。那時人們就認識到,乙個法杖的法力取決於使用的礦石。

一般地,礦石越多則法力越強,但物極必反:有時,人們為了獲取更強的法力而

使用了很多礦石,卻在煉製過程中發現魔法礦石全部消失了,從而無法煉製

出法杖,這個現象被稱為「魔法抵消」 。特別地,如果在煉製過程中使用超過

一塊同一種礦石,那麼一定會發生「魔法抵消」。

後來,隨著人們認知水平的提高,這個現象得到了很好的解釋。經過了大量

的實驗後,著名法師 dmitri 發現:如果給現在發現的每一種礦石進行合理的編

號(編號為正整數,稱為該礦石的元素序號),那麼,乙個礦石組合會產生「魔

法抵消」當且僅當存在乙個非空子集,那些礦石的元素序號按位異或起來

個同樣的礦石必將發生「魔法抵消」,因為這兩種礦石的元素序號相同,異或起

來為零。

並且人們有了測定魔力的有效途徑,已經知道了:合成出來的法杖的魔力

等於每一種礦石的法力之和。人們已經測定了現今發現的所有礦石的法力值,

並且通過實驗推算出每一種礦石的元素序號。

現在,給定你以上的礦石資訊,請你來計算一下當時可以煉製出的法杖最多

有多大的魔力。

input

第一行包含乙個正整數n,表示礦石的種類數。

接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號

和魔力值。

output

僅包一行,乙個整數:最大的魔力值

sample input 3

110220

330sample output

50hint

由於有「魔法抵消」這一事實,每一種礦石最多使用一塊。

如果使用全部三種礦石,由於三者的元素序號異或起來:

1 xor 2 xor 3 = 0

,則會發生魔法抵消,得不到法杖。

可以發現,最佳方案是選擇後兩種礦石,法力為

20+30=50

。對於全部的資料:n ≤

1000,numberi ≤ 10^18

,magici ≤

10^4

**:

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

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

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

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

const

int inf = 1

<< 30

;typedef

long

long

ll;typedef

double

db;template

void read(t &x)

template

void

write(t x)

struct

node

a[100010

];ll ans = 0

,n;ll p[

100010

];bool

cmp(node a,node b)

void get_num(int

f,ll x)

x ^=p[i];

}if(x != 0

) ans +=a[f].y;

}int

main()

sort(a + 1,a + n + 1

,cmp);

duke(i,

1,n)

printf(

"%lld\n

",ans);

return0;

}/*31 10

2 20

3 30

*/

貪心 線性基 BeiJing2011 元素

輸入 第一行包含乙個正整數n,表示礦石的種類數。接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號 和魔力值。輸出 僅包一行,乙個整數 最大的魔力值 樣例輸入 3 1 10 2 20 3 30 樣例輸出 50用到了線性基,按照權值排序之後再順序進行即可。只要最後異或...

BZOJ 2460 元素 線性基

input 第一行包含乙個正整數n,表示礦石的種類數。接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號 和魔力值。output 僅包一行,乙個整數 最大的魔力值 sample input 3 1 10 2 20 3 30 sample output 50hint ...

BZOJ 2460 元素 線性基 貪心

線性基是一種特殊的基,它通常會在異或運算中出現,它的意義是 通過原集合s的某乙個最小子集s1使得s1內元素相互異或得到的值域與原集合s相互異或得到的值域相同。性質 線性基能相互異或得到原集合的所有相互異或得到的值。線性基是滿足性質1的最小的集合 線性基沒有異或和為0的子集。題意 n個礦石,第i個礦石...