cf786C(xjb)

题目链接:http://codeforces.com/problemset/problem/768/C

 

题意:给出一个数组,经过k次操作后最大元素和最小元素分别是什么。。

操作:给当前数组排序,再将第奇数个元素异或 x;

 

思路:由于异或运算的性质,经过落干次操作后会形成稳定的数组;

 

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string.h>
 4 using namespace std;
 5 
 6 const int inf=1e5;
 7 const int MAXN=1e5+10;
 8 int a[MAXN], b[MAXN], c[MAXN];
 9 
10 int main(void){
11     int n, k, x;
12     cin >> n >> k >> x;
13     for(int i=0; i<n; i++){
14         cin >> a[i];
15     }
16     for(int i=0; i<k; i++){
17         sort(a, a+n);
18         for(int j=0; j<n; j++){
19             if((j+1)&1){
20                 a[j]^=x;
21             }
22         }
23         sort(a, a+n);
24         b[i]=a[0];
25         c[i]=a[n-1];
26         if(i>=2&&b[i]==b[i-1]&&b[i]==b[i-2]&&c[i]==c[i-1]&&c[i]==c[i-2]) break;
27     }
28     cout << a[n-1] << " " << a[0] << endl;
29     return 0;
30 }
View Code

 

posted @ 2017-04-14 09:35  geloutingyu  阅读(487)  评论(0编辑  收藏  举报