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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

元素(HYSBZ-2460)

發布時間:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 元素(HYSBZ-2460) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem Description

相傳,在遠古時期,位于西方大陸的 Magic Land 上,人們已經掌握了用魔法礦石煉制法杖的技術。那時人們就認識到,一個法杖的法力取決于使用的礦石。

一般地,礦石越多則法力越強,但物極必反:有時,人們為了獲取更強的法力而使用了很多礦石,卻在煉制過程中發現魔法礦石全部消失了,從而無法煉制出法杖,這個現象被稱為“魔法抵消” 。特別地,如果在煉制過程中使用超過一塊同一種礦石,那么一定會發生“魔法抵消”。?

后來,隨著人們認知水平的提高,這個現象得到了很好的解釋。經過了大量的實驗后,著名法師 Dmitri 發現:如果給現在發現的每一種礦石進行合理的編號(編號為正整數,稱為該礦石的元素序號),那么,一個礦石組合會產生“魔法抵消”當且僅當存在一個非空子集,那些礦石的元素序號按位異或起來為零。 (如果你不清楚什么是異或,請參見下一頁的名詞解釋。 )

例如,使用兩個同樣的礦石必將發生“魔法抵消”,因為這兩種礦石的元素序號相同,異或起來為零。

并且人們有了測定魔力的有效途徑,已經知道了:合成出來的法杖的魔力等于每一種礦石的法力之和。人們已經測定了現今發現的所有礦石的法力值,并且通過實驗推算出每一種礦石的元素序號。?

現在,給定你以上的礦石信息,請你來計算一下當時可以煉制出的法杖最多有多大的魔力。?

Input

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

接下來 N行,每行兩個正整數Numberi 和 Magici,表示這種礦石的元素序號和魔力值。

Output

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

Sample Input

3?
1 10?
2 20?
3 30

Sample Output

50

題意:給出 n 個物品,每個物品有兩個屬性 a、b,現在要在這些物品中取任意個,使得取出的物品中,任意幾個物品的屬性 a 的異或和不為 0,且 b 的和最大,求最后取出的物品的屬性 b 的和

思路:

首先考慮 b 的和最大,顯然要按照 b 降序排序來進行取最大的,然后就是要滿足 a 的異或和不為 0

考慮線性基的性質,在線性基中,任意基底的異或和不為 0,因此只要能成功添加到線性基中的向量,均滿足 a 的異或和不為 0

故而將 b 按降序排序后,將 n 個物品的屬性 a 逐個加入線性基中,如果能成功加入到線性基中,就累加 b 的值

Source Program

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long #define Pair pair<int,int> const int MOD = 1E9+7; const int N = 1000+5; const int dx[] = {0,0,-1,1,-1,-1,1,1}; const int dy[] = {-1,1,0,0,-1,1,-1,1}; using namespace std;struct LinearBasis {LL d[60+5];//線性基LinearBasis() {memset(d,0,sizeof(d));}bool add(LL x){for(int i=60; i>=0; i--)if(x&(1LL<<i)) {if(d[i])//插入失敗,異或x^=d[i];else {//插入成功,保存后退出d[i]=x;break;}}return x>0;//x>0插入成功} }lb; struct Node{LL a,b;bool operator <(const Node &rhs)const{return b>rhs.b;} }node[N]; int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld%lld",&node[i].a,&node[i].b);sort(node+1,node+1+n);LL res=0;for(int i=1;i<=n;i++)if(lb.add(node[i].a))res+=node[i].b;printf("%lld\n",res);return 0; }

?

總結

以上是生活随笔為你收集整理的元素(HYSBZ-2460)的全部內容,希望文章能夠幫你解決所遇到的問題。

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