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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【HDU - 5014】Number Sequence(贪心构造)

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【HDU - 5014】Number Sequence(贪心构造) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題干:

There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules:?

● a?i?∈ [0,n]?
● a?i?≠ a?j( i ≠ j )?

For sequence a and sequence b, the integrating degree t is defined as follows(“?” denotes exclusive or):?

t = (a?0?? b?0) + (a?1?? b?1) +···+ (a?n?? b?n)



(sequence B should also satisfy the rules described above)?

Now give you a number n and the sequence a. You should calculate the maximum integrating degree t and print the sequence b.?

Input

There are multiple test cases. Please process till EOF.?

For each case, the first line contains an integer n(1 ≤ n ≤ 10?5), The second line contains a?0,a?1,a?2,...,a?n.?

Output

For each case, output two lines.The first line contains the maximum integrating degree t. The second line contains n+1 integers b?0,b?1,b?2,...,b?n. There is exactly one space between b?i?and b?i+1?(0 ≤ i ≤ n - 1). Don’t ouput any spaces after bn.?

Sample Input

4 2 0 1 4 3

Sample Output

20 1 0 2 3 4

題目大意:

● a?i?∈ [0,n]?
● a?i?≠ a?j( i ≠ j )?

同樣的b也滿足該規(guī)則,
現(xiàn)在問你是否存在一個序列b,使得t最大

t = (a?0?異或 b?0) + (a?1 異或?b?1) +???+ (a?n 異或?b?n)

n(1 ≤ n ≤ 10?5)

解題報告:

? ?直接從大到小貪心,讓每一個數(shù)和 他按位取反的那個數(shù)匹配。這樣雖然可能會剩下一個0,但是易知這樣一個1都沒有浪費,所以這樣得到的結果一定是最優(yōu)的。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define FF first #define SS second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e5 + 5; int n,a[MAX]; int b[MAX]; ll ans; int main() {while(cin>>n) {ans = 0;memset(b,-1,sizeof b);b[0]=0;for(int i = 0; i<=n; i++) cin>>a[i];for(int sta = n; sta>0; sta--) {if(b[sta] != -1) continue;int bit;for(bit = 22; bit>=0; bit--) {if(sta&(1<<bit)) break;}if(bit == -1)continue;int oth = 0; for(int i = bit; i>=0; i--) {if(sta & (1<<i)) continue;else oth |= (1<<i);}b[oth] = sta; b[sta] = oth;}for(int i = 0; i<=n; i++) ans += i^b[i];printf("%lld\n",ans);for(int i = 0; i<=n; i++) printf("%d%c",b[a[i]],i == n ? '\n' : ' '); }return 0 ; }

?

總結

以上是生活随笔為你收集整理的【HDU - 5014】Number Sequence(贪心构造)的全部內容,希望文章能夠幫你解決所遇到的問題。

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