Codeforces Round #312 (Div. 2) C Amr and Chemistry
2015-10-28 19:03
489 查看
题目的大意是:有N个数,你可以一个数*2或/2向下取整,问至少多少步可以使所有数都相同。
这题就是暴力,把每个数二进制表示,从高位向地位枚举,枚举答案达到这一位需要的步数,取最大的即可
http://codeforces.com/contest/558/problem/C代码写的比较丑
#include <map> #include <set> #include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; const int MAXN = 100005; int a[MAXN]; int n; int Bit[MAXN][40]; void input() { memset(Bit,-1,sizeof(Bit)); for(int i = 1 ; i <= n ; i++ ) { scanf("%d",a+i); } } void solve() { int j,k; for(int i = 1 ; i <= n ; i++) { k = 1; while(a[i]) { Bit[i][k] = a[i] % 2; a[i] = a[i] / 2; k++; } for(j = 32 ; ; j --) { if( (k-(32-j)-1) < 1) break; Bit[i][j] = Bit[i][k-(32-j)-1]; } for( ; j > 0 ; j --) { Bit[i][j] = -1; } } int flag = 0; int ans[40]; memset(ans,0,sizeof(ans)); int cost = 0; int precost = 0; for(int i = 32 ; i >= 1 ; i --) { //看第i位有没有-1或0;有0或者-1就要全部改成0; precost = cost; flag = 0; int num = 0; for(j = 1 ; j <= n ; j ++) { if(Bit[j][i] == 0 || Bit[j][i] == -1) { flag = 1; break; } } if(flag) { for(j = 1 ; j <= n ; j ++) { if(Bit[j][i] == -1) { num ++; cost ++; Bit[j][i] = 0; } else if(Bit[j][i] == 1){ num += 2; cost += 2; Bit[j][i] = 0; for(k = i - 1; k >= 1 ; k--) { if(Bit[j][k] != -1) { num ++; cost ++; Bit[j][k] = -1; } else { break; } } } else if(Bit[j][i] == 0) { for(k = i - 1 ; k >= 1 ; k--) { if(Bit[j][k] != -1) { num ++; } else { break; } } } } } else { for(j = 1 ; j <= n ; j++) { for(k = i - 1 ; k >= 1 ; k--) { if(Bit[j][k] != -1) { num ++; } else { break; } } } } ans[i] = num + precost; } int minnum = ans[1]; for(int i = 2 ; i <= 32 ; i++) { minnum = min(minnum,ans[i]); } printf("%d\n",minnum); } int main(void) { //freopen("a.in","r",stdin); while(~scanf("%d",&n)) { input(); solve(); } return 0; }
相关文章推荐
- Oracle系统参数调整实操--小记
- FTP服务详解
- 计算机网络基本概念
- nginx反向代理tomcat、实现动静分离/配置文件
- Xcode7调试Address Sanitizer扫尾
- 个人关于模块化的理解
- 大龄屌丝自学笔记--Java零基础到菜鸟--038
- LEETCODE-Valid Palindrome
- P78、面试题10:二进制中1的个数
- PAT 1005. 继续(3n+1)猜想
- 分享到QQ成功后,没有回调成功,当再次分享的时候,失败回调执行了
- 全排列(含递归和非递归的解法)
- c++中dll介绍(详细)
- P73、面试题9:斐波那契数列
- Xamrin开发安卓笔记(二)
- C++11学习笔记4---lambda表达式
- Spring常用注解汇总
- php数组某个字段数据重复问题
- 在CentOS 6.3 64bit上使用 smartmontools和MageCli 监测硬盘的健康状态
- Oracle PL/SQL性能DBMS_PROFILE