Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]
数学 A - Raising Bacteria
分析:如果1 << k == x,那么放1个就可以了;否则还要加上差值的二进制的1的个数。
/************************************************
* Author :Running_Time
* Created Time :2015/9/16 星期三 23:13:08
* File Name :A.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;int main(void) {int x; scanf ("%d", &x);int i = 1;while (i < x) {i <<= 1;}if (i == x) {printf ("%d\n", 1);}else {int ans = 1;i >>= 1;int y = x - i;while (y) {if (y & 1) ans++;y >>= 1;}printf ("%d\n", ans);}return 0;
}
贪心 B - Finding Team Member
题意:每两个人组成一个team,两人之间有一个连接的强度,问所有人连接强度最大的team组合是怎样的
分析:按照连接强度排序,因为连接强度无重复。如果该连接强度连接的两个人没有组成team,那么他们就组成team,这样的选择是连接强度最大的
总结:这题的贪心方法没想到,按照每个人能连接的人的连接强度排序WA了
/************************************************
* Author :Running_Time
* Created Time :2015/9/16 星期三 23:13:11
* File Name :B.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 8e2 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
struct Team {int u, v, w;Team (int u = 0, int v = 0, int w = 0) : u (u), v (v), w (w) {}bool operator < (const Team &r) const {return w > r.w;}
}t[N*N];
int ans[N];int main(void) {int n; scanf ("%d", &n);int m = n * 2;int tot = 0;for (int i=2; i<=m; ++i) {for (int x, j=1; j<=i-1; ++j) {scanf ("%d", &x);t[++tot] = Team (i, j, x);}}sort (t+1, t+1+tot);memset (ans, 0, sizeof (ans));for (int i=1; i<=tot; ++i) {int u = t[i].u, v = t[i].v;if (!ans[u] && !ans[v]) {ans[u] = v; ans[v] = u;}}for (int i=1; i<=m; ++i) {printf ("%d%c", ans[i], i == m ? '\n' : ' ');}return 0;
}
二分 C - A Problem about Polyline
题意:有一个(0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – 的折线,问(a, b)是否在折线上
分析:两种情况,点在某个三角形的左边:a = 2 * k * x + b,或者在右边:a = 2 * k * x - b,满足x >= b,二分查找k
/************************************************
* Author :Running_Time
* Created Time :2015/9/16 星期三 23:13:14
* File Name :C.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;int main(void) { //UNACdouble a, b;scanf ("%lf%lf", &a, &b);if (a < b) puts ("-1");else {double ans = 1e9 + 10;int l = 1, r = 1e9;while (l <= r) {int mid = (l + r) / 2;double xx = (a - b) / (double) (2 * mid);if (xx >= b) {ans = min (ans, xx);l = mid + 1;}else r = mid - 1;}l = 1, r = 1e9;while (l <= r) {int mid = (l + r) / 2;double xx = (a + b) / (double) (2 * mid);if (xx >= b) {ans = min (ans, xx);l = mid + 1;}else r = mid - 1;}printf ("%.9f\n", ans);}return 0;
}
贪心+位运算 D - "Or" Game
题意:可以对n个数字其中的数字*x,最多k次,问 的最大值
分析:其决定因素的是二进制的最高位,如果ai*x,那么剩下的所有x都给ai,降低复杂度使用前缀和后缀,枚举选取ai得到最大值
/************************************************
* Author :Running_Time
* Created Time :2015/9/17 星期四 17:21:00
* File Name :D.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 2e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
ll a[N], prefix[N], suffix[N];int main(void) {int n, k, x; scanf ("%d%d%d", &n, &k, &x);for (int i=1; i<=n; ++i) scanf ("%I64d", &a[i]);ll y = 1;for (int i=1; i<=k; ++i) y *= x;for (int i=1; i<=n; ++i) {prefix[i] = prefix[i-1] | a[i];}for (int i=n; i>=1; --i) {suffix[i] = suffix[i+1] | a[i];}ll ans = 0;for (int i=1; i<=n; ++i) {ans = max (ans, prefix[i-1] | (a[i] * y) | suffix[i+1]);}printf ("%I64d\n", ans);return 0;
}
三分||二分 E - Weakness and Poorness
题意:n个数字,每个数字减去x,使得求最大连续子序列和最小连续子序列的绝对值的最大值最小
分析:x增加,最大连续子序列f(x)递减,最小连续子序列g(x)递增,可用三分。二分的没想明白,先放着
三分:
/************************************************
* Author :Running_Time
* Created Time :2015/9/17 星期四 17:56:57
* File Name :E.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 2e5 + 10;
const double INF = 1e10;
const int MOD = 1e9 + 7;
double a[N], b[N];
int n;double cal_max(void) {double sum = 0, mx = 0;for (int i=1; i<=n; ++i) {sum = max (sum + b[i], b[i]);if (sum > mx) mx = sum;}return mx;
}double cal_min(void) {double sum = 0, mn = INF;for (int i=1; i<=n; ++i) {sum = min (sum + b[i], b[i]);if (sum < mn) mn = sum;}return mn;
}double cal(double x) {for (int i=1; i<=n; ++i) b[i] = a[i] - x;return max (cal_max (), -cal_min ());
}int main(void) {scanf ("%d", &n);for (int i=1; i<=n; ++i) scanf ("%lf", &a[i]);double l = -INF, r = INF;for (int i=1; i<=200; ++i) {double mid = (l + r) / 2;double lmid = (l + mid) / 2;double rmid = (r + mid) / 2;if (cal (lmid) < cal (rmid)) r = rmid;else l = lmid;}printf ("%.10f\n", cal ((l + r) / 2));return 0;
}
二分:
/************************************************
* Author :Running_Time
* Created Time :2015/9/17 星期四 17:56:57
* File Name :E.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 2e5 + 10;
const double INF = 1e10;
const int MOD = 1e9 + 7;
double a[N], b[N];
int n;double cal_max(void) {double sum = 0, mx = 0;for (int i=1; i<=n; ++i) {sum = max (sum + b[i], b[i]);if (sum > mx) mx = sum;}return mx;
}double cal_min(void) {double sum = 0, mn = INF;for (int i=1; i<=n; ++i) {sum = min (sum + b[i], b[i]);if (sum < mn) mn = sum;}return mn;
}bool check(double x) {for (int i=1; i<=n; ++i) b[i] = a[i] - x;double A = cal_max ();double B = cal_min ();return (-B > A);
}int main(void) {scanf ("%d", &n);for (int i=1; i<=n; ++i) scanf ("%lf", &a[i]);double l = -INF, r = INF;for (int i=1; i<=200; ++i) {double mid = (l + r) / 2;if (check (mid)) r = mid;else l = mid;}for (int i=1; i<=n; ++i) b[i] = a[i] - l;printf ("%.10f\n", cal_max ());return 0;
}
转载于:https://www.cnblogs.com/Running-Time/p/4818822.html
Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]相关推荐
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. Or Game
题目链接:http://codeforces.com/contest/578/problem/B 题目大意:现在有n个数,你可以对其进行k此操作,每次操作可以选择其中的任意一个数对其进行乘以x的操作. ...
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] A A Problem about Polyline(数学)
题目中给出的函数具有周期性,总可以移动到第一个周期内,当然,a<b则无解. 假设移动后在上升的那段,则有a-2*x*n=b,注意限制条件x≥b,n是整数,则n≤(a-b)/(2*b).满足条件的 ...
- [Codeforces] Round #320 (Div.2)
1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...
- codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)
解题思路:就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- Codeforces 504 A (Round #285 div.1 A) Misha and Forest
Codeforces Round #285 (Div.1) A Misha and Forest 水题水题水-- 题意:给你一些点,给出他们连通了多少个点以及这些点的下标的异或值,让你找出一个图 题解 ...
- Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...
最新文章
- 这可能是程序员学习大数据架构师的最佳之路!另附送1024G学习资料!
- 【分布式事务系列九】聊聊分布式事务
- P1134 阶乘问题
- rep movsd + rep movsb 内联实现 strcpy
- Neo4j简单的样例
- javascript/jquery获取图片的原始大小
- mysql with-embedded-server_终于成功实验程序实现Embedded MySQL Server启动(C/C++)
- text html template判断,template-web中循环 判断 计算
- latex 调整表格的行高_latex 表格如何控制行高,行距,行与行之间的距离
- 网络综合实验结课总结
- qq音乐linux版本下载地址,qq音乐linux版本下载
- Java8 LocalDateTime 转时间戳 秒、毫秒
- uni-app自定义配置安卓模拟器 - MuMu模拟器
- 上海计算机在职专业硕士学校,专业硕士计算机类可以报考上海哪些学校?
- 安卓手机与苹果手机安装包的区别
- fiddle 下载及配置
- 【Linux命令学习3】创建目录(mkdir)和删除空目录(rmdir),创建普通文件(touch),对目录或文件进行复制(cp)。
- 亚信实习——初来乍到
- 【电源专题】SMPS电源的EMI来源和测量方法
- 学会如何管理和保护布线系统
热门文章
- 取消冒泡的兼容性写法
- 【分享】学长的安利来了~~O(∩_∩)O
- 软件GUI测试中的关注点
- 更换系统后无法catkin_make universal robot 包
- PyQt5图形界面GUI开发过程记录
- 【C++笔记】构造函数与析构函数相关知识
- 远程linux服务器中安装jupyter通过本地浏览器访问使用
- c语言文件操作常用函数及读写文件代码举列
- three.js glb 多个_奔驰GLB外观完美!内饰酷炫!动力倍儿棒
- oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战