codeforces 768C
来源:互联网 发布:虚拟货币网站源码php 编辑:程序博客网 时间:2024/06/03 20:30
题目链接:codeforces 768C
一个数组,每次先排序,再每隔个一个对x进行异或,k次操作之后,最大最小值是多少
如果用普通的排序,效率O(knlogn)
,1e5的数据会超时,但是题目里有一个条件:0<=a<=1000,也就是最大1024
所以可以用开一个数组,记录下每个数字出现的次数,这样就不需要排序了,效率k*1000
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN = 1000+100, INF = 1e8;int n, k, x, num[2][MAXN], a, mi, ma;int main(){ cin >> n >> k >> x; mi = INF; ma = -INF; for(int i=0; i<n; ++i) { scanf("%d", &a); ++num[0][a]; mi = min(mi, a); ma = max(ma, a); } for(int i=0; i<k; ++i) { memset(num[(i+1)&1], 0, sizeof(num[(i+1)&1])); int now = 1; for(int j=mi; j<=ma; ++j) { if(num[i&1][j]) { a = j^x; if((num[i&1][j]&1) == 0) { num[(i+1)&1][a] += num[i&1][j]/2; num[(i+1)&1][j] += num[i&1][j]/2; } else if(now&1) { num[(i+1)&1][a] += num[i&1][j]/2+1; num[(i+1)&1][j] += num[i&1][j]/2;// cout << "i+1 " << i+1 << " " << a << " " << num[i][j] << endl; } else { num[(i+1)&1][a] += num[i&1][j]/2; num[(i+1)&1][j] += num[i&1][j]/2+1; } now += num[i&1][j]; } } mi = INF; ma = -INF; for(int j=0; j<=1090; j++) { if(num[(i+1)&1][j]) { mi = min(mi, j); ma = max(ma, j); } } } cout << ma << " " << mi << endl; return 0;}
0 0
- CodeForces 768C
- codeforces 768C
- codeforces 768C
- Codeforces-340-C(c++)
- Codeforces-507-C(c++)
- CodeForces 731C C
- CodeForces-612C C
- CODEFORCES 265C CODEFORCES, 265C
- codeforces #78 div2 C
- Codeforces 117C Cycle
- CodeForces 209C
- CodeForces 156C Cipher
- codeforces 148 div2 C
- codeforces 242C
- Codeforces-234C Weather
- codeforces 106C Buns
- codeforces 158C
- Codeforces 243C
- jQuery大全
- RabbitMQ使用简记
- Sqoop1 从Oracle往Hive迁移数据
- redis安全策略
- accp7.0S2优化myschool数据库设计第五章项目
- codeforces 768C
- AppletViewer使用方法介绍
- SwaggerUI ASP.Net WebAPI2
- 理解spark闭包
- mybatis多对多关系映射
- GreenDAO
- Android SDK tools platform-tools build-tools 区别
- ZeroC ICE学习经验总结
- 李斌的个人网站