数学 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]相关推荐

  1. Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. Or Game

    题目链接:http://codeforces.com/contest/578/problem/B 题目大意:现在有n个数,你可以对其进行k此操作,每次操作可以选择其中的任意一个数对其进行乘以x的操作. ...

  2. 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).满足条件的 ...

  3. [Codeforces] Round #320 (Div.2)

    1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...

  4. codeforces Round #320 (Div. 2) C. A Problem about Polyline(数学) D. Or Game(暴力,数学)

    解题思路:就是求数 n 对应的二进制数中有多少个 1 #include <iostream> #include<cstdio> using namespace std; int ...

  5. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  6. 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 ...

  7. 构造 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 的例子可以 ...

  8. Codeforces 504 A (Round #285 div.1 A) Misha and Forest

    Codeforces Round #285 (Div.1) A Misha and Forest 水题水题水-- 题意:给你一些点,给出他们连通了多少个点以及这些点的下标的异或值,让你找出一个图 题解 ...

  9. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

最新文章

  1. 这可能是程序员学习大数据架构师的最佳之路!另附送1024G学习资料!
  2. 【分布式事务系列九】聊聊分布式事务
  3. P1134 阶乘问题
  4. rep movsd + rep movsb 内联实现 strcpy
  5. Neo4j简单的样例
  6. javascript/jquery获取图片的原始大小
  7. mysql with-embedded-server_终于成功实验程序实现Embedded MySQL Server启动(C/C++)
  8. text html template判断,template-web中循环 判断 计算
  9. latex 调整表格的行高_latex 表格如何控制行高,行距,行与行之间的距离
  10. 网络综合实验结课总结
  11. qq音乐linux版本下载地址,qq音乐linux版本下载
  12. Java8 LocalDateTime 转时间戳 秒、毫秒
  13. uni-app自定义配置安卓模拟器 - MuMu模拟器
  14. 上海计算机在职专业硕士学校,专业硕士计算机类可以报考上海哪些学校?
  15. 安卓手机与苹果手机安装包的区别
  16. fiddle 下载及配置
  17. 【Linux命令学习3】创建目录(mkdir)和删除空目录(rmdir),创建普通文件(touch),对目录或文件进行复制(cp)。
  18. 亚信实习——初来乍到
  19. 【电源专题】SMPS电源的EMI来源和测量方法
  20. 学会如何管理和保护布线系统

热门文章

  1. 取消冒泡的兼容性写法
  2. 【分享】学长的安利来了~~O(∩_∩)O
  3. 软件GUI测试中的关注点
  4. 更换系统后无法catkin_make universal robot 包
  5. PyQt5图形界面GUI开发过程记录
  6. 【C++笔记】构造函数与析构函数相关知识
  7. 远程linux服务器中安装jupyter通过本地浏览器访问使用
  8. c语言文件操作常用函数及读写文件代码举列
  9. three.js glb 多个_奔驰GLB外观完美!内饰酷炫!动力倍儿棒
  10. oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战