hdoj5491
2015-09-29 13:20
134 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5491
补一下之前网络赛的水题 写的好乱
就是个贪心模拟
让低位为1
补一下之前网络赛的水题 写的好乱
就是个贪心模拟
让低位为1
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <set> #include <map> #include <vector> #include <queue> #include <fstream> #include <math.h> #include <iomanip> using namespace std; typedef long long ll; typedef pair<int, int> Pii; const int INF = 0x7fffffff; ll n[100], m[100], ans[100]; //n 二进制 m前缀 ans 答案的二进制 ll x, y, z; int main() { int t; scanf("%d", &t); for (int cs = 1; cs <= t; cs++) { memset(n, 0, sizeof(n)); memset(m, 0, sizeof(m)); memset(ans, 0, sizeof(ans)); int i; ll tem = x; scanf("%I64d%I64d%I64d", &x, &y, &z); for (i = 0; x; i++) { n[i] = x % 2; x /= 2; } x = tem; ll len = i; // for(int i=0;i<len;i++) cout<<n[i]<<" "; // cout<<endl; for (int i = 0; i < len; i++) { m[i + 1] = m[i] + (n[i] == 1 ? 1 : 0); } for (int i = len + 1; i <= max(len + 1, z); i++) m[i] = m[i - 1]; ll totol = m[len]; for (int i = 1; i <= max(z, len + 1); i++) { int tt = 0; if (n[i - 1] == 0) { tt = totol - m[i] + i; if (tt >= y && tt - i + 1 <= z) { //满足要求 int res = y - (totol - m[i]) - 1; for (int j = 1; j <= max(z, len + 1); j++) { if (j <= i) { if (res > 0) ans[j] = 1; //低位赋值1 else ans[j] = 0; res--; } else ans[j] = n[j - 1]; } ans[i] = 1; break; } } } // for(int i=1;i<=len;i++) cout<<m[i]<<" "; ll as = 0; //注意用ll for (int i = max(z, len + 1); i > 0; i--) { as *= 2; as += ans[i]; } printf("Case #%d: %I64d\n", cs, as); } return 0; }
相关文章推荐
- 汇总:Linux下svn命令大全
- MySQL中的库的建立和表的建立
- telnet ,openssh以及openssl
- SQLiteDatabase.insert函数参数解释说明
- Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
- spark任务调度
- org.springframework.beans.BeanInstantiationException浅析
- CF div2 322 A
- Linux命令之env:显示当前用户的环境变量
- hdu5491 The Next
- [LeetCode] Summary Ranges
- 多文件上传
- JAVA关于常量
- java的多态——null参数会调用哪个方法?
- 大数据学习笔记1
- 安装php的php-protobu扩展及使用 (二)
- 《pointers on c》的第1个例子
- java使用正则表达式方法和正则表达式大全
- 1 --SQLite 怎么关联起来
- nodejs 版本更新问题(v0.8.14 -> v4.1.1)