Codeforces Round #177 (Div. 2)(完全)

来源:互联网 发布:centos查看uuid 编辑:程序博客网 时间:2024/04/30 17:08

A

B 以中位数为基准

C 别忘记 k == 1 && n == 1 的情况

D 公式 k^(k-1)*(n-k)^(n-k) 还没推出来,比赛的时候是凑出来的

E  贪心,最大化使其二进制位上的1不要被异或掉。

#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;#define LL __int64int f[33];bool vis[1000006];int ans[1000006];int get(int i) {    int c = 0;    while(i) {c++, i>>=1;}    return c;}int main() {    int i, n;    f[0] = 0;    for(i = 1; i <= 31; i++)        f[i] = f[i-1]<<1|1;    cin >> n;    LL cnt = 0;    for(i = n; i >= 0; i--) if(!vis[i]) {        int a = get(i);        ans[i] = f[a]-i;        ans[f[a]-i] = i;        vis[i] = vis[f[a]-i] = 1;        cnt += 2*f[a];    }    printf("%I64d\n", cnt);    for(i = 0; i <= n; i++) printf("%d ", ans[i]);    puts("");    return 0;}

原创粉丝点击