CF1300C-Anu Has a Function 思维

Posted iat14

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1300C-Anu Has a Function 思维相关的知识,希望对你有一定的参考价值。

那个函数的功能f(x,y)就是把y有1的位置,对应的x位置也都变成0。所以我们发现只有第一个数不同会带来结果变化,后面怎么排序没关系。

我们考虑那个数当第一个数最后结果最大。我们记录下二进制下每一位,出现过多少个1。然后依次枚举每个数当第一个数,然后把这个数1的位置对应出现1次数减去1,如果变0了,就证明这个数放在开头,答案二进制这一位是1,然后取最大就好了。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int a[210000],uni[30],cnt[30],n,maxn;
 5 int main()
 6 {
 7     uni[0] = 1;
 8     for (int i = 1;i <= 30;i++)
 9         uni[i] = uni[i - 1] << 1;
10     scanf("%d",&n);
11     for (int i = 1;i <= n;i++)
12     {
13         scanf("%d",&a[i]);
14         for (int o = 0;o <= 30;o++)
15             if (a[i] & uni[o])
16                 cnt[o]++;
17     }
18     maxn = 0;
19     for (int i = 1;i <= n;i++)
20     {
21         int tmp = 0;
22         for (int o = 0;o <= 30;o++)
23             if ((a[i] & uni[o]) && cnt[o] == 1)
24                 tmp += uni[o];
25         if (tmp >= maxn)
26         {
27             maxn = tmp;
28             swap(a[1],a[i]);
29         }
30     }
31     printf("%d",a[1]);
32     for (int i = 2;i <= n;i++)
33         printf(" %d",a[i]);
34     printf("
");
35     return 0;
36 }

 

以上是关于CF1300C-Anu Has a Function 思维的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #618 (Div.1) (Div.2) (CF1299) (CF1300)

CF 1299.A——Anu Has a Function二进制

cf1072B. Curiosity Has No Limits(枚举)

CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)

CF1300E Water Balance

CF777B 1300 *