CodeForces Round #320 Div2
A. Raising Bacteria
计算一下x的bitcount就是答案。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int bitcount(int x)
{
int ans = ;
while(x)
{
if(x & ) ans++;
x >>= ;
}
return ans;
} int main()
{
int x; scanf("%d", &x);
printf("%d\n", bitcount(x)); return ;
}
代码君
B. Finding Team Member
贪心
从大到小排个序,如果两个人都没有舞伴那就结为一组。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn = + ; struct FK
{
int r, c, d;
FK() {}
FK(int r, int c, int d):r(r), c(c), d(d) {} bool operator < (const FK& a) const
{
return d > a.d;
}
}fk[maxn * maxn]; int n; int match[maxn]; int main()
{
int tot = ;
scanf("%d", &n); n <<= ; for(int i = ; i <= n; i++)
for(int j = ; j < i; j++)
{
int x; scanf("%d", &x);
fk[tot++] = FK(i, j, x);
} sort(fk, fk + tot); int remain = n;
for(int i = ; i < tot && remain; i++)
{
FK& e = fk[i];
int u = e.r, v = e.c;
if(!match[u] && !match[v])
{
match[u] = v;
match[v] = u;
remain -= ;
}
} for(int i = ; i < n; i++) printf("%d ", match[i]);
printf("%d\n", match[n]); return ;
代码君
C. A Problem about Polyline
题意:
给出 (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – .... 这样一条折线,和上面一点(a, b)。求可能的最小的x
分析:
首先(a, b)与原点连线的斜率最大是1,绝对不会超过1. 所以一开始判断一下,如果b > a,无解。
分情况讨论(a, b)是上升点还是下降点:
- (a, b)是上升点,那么点(a - b, 0)一定在折线上,所以得到 a - b = 2kx (k是正整数)。x = (a - b) / (2k),注意到折线上的点纵坐标最大值为x,所以x应该满足x≥b。所以有k ≤ (a - b) / (2b),k取最大值时,x取得最小值。
- (a, b)是下降点,和前一种情况一样。点(a + b, 0)一定在折线上,后面的分析思路和上面一样。
这两种情况算出来两个x的最小值再取最小值就是答案。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL; int main()
{
LL a, b; cin >> a >> b; if(b > a) { puts("-1"); return ; }
if(a == b) { printf("%I64d.000000000000\n", a); return ; } double x1, x2;
LL k = (a - b) / (b * );
x1 = 1.0 * (a - b) / 2.0 / k;
k = (a + b) / (b * );
x2 = 1.0 * (a + b) / 2.0 / k;
x1 = min(x1, x2); printf("%.12f\n", x1); return ;
}
代码君
D. "Or" Game
这个题是贪心,但是有种黑科技的赶脚,目前没想明白贪心的理由。
贪心的方法是:既然操作不超过k次,那么k次操作直接用在同一个数上面。然后枚举k次操作在哪个数上面,预处理一下前缀后缀的或运算的值,时间复杂度为O(n)。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL; const int maxn = + ; LL a[maxn], pre[maxn], suf[maxn]; int main()
{
int n, k;
LL x;
scanf("%d%d%I64d", &n, &k, &x); for(int i = ; i <= n; i++)
{
scanf("%I64d", a + i);
pre[i] = pre[i - ] | a[i];
}
for(int i = n; i > ; i--) suf[i] = suf[i + ] | a[i]; LL x0 = x;
for(int i = ; i <= k; i++) x *= x0; LL ans = ;
for(int i = ; i <= n; i++) ans = max(ans, pre[i-] | (a[i] * x) | suf[i+]); printf("%I64d\n", ans); return ;
}
代码君
E. Weakness and Poorness
很明显,当x向两边趋于正负很大的数的时候,序列{ ai - x }的weakness也是变大的。
但不明显的一点就是,为什么中间只有一个极值?
如果中间只有一个极值的话,就可以用三分找到对应的极小值,同时也是最小值。
关于weakness的计算:
我们可以用线性时间的DP来计算数列的最大连续子序列:
d(i)表示以ai结尾的子序列的最大值,状态转移为d(i) = max{ d(i-1) + ai, ai }
同样地,再计算一个最小连续子序列,取两者绝对值的最大值就是整个序列的weakness
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; const int maxn = + ;
const double eps = 1e-; int n;
double a[maxn]; double Calc(double x)
{
double ans = , p = , q = ;
for(int i = ; i <= n; i++)
{
double t = a[i] - x;
if(p > ) p += t; else p = t;
if(q < ) q += t; else q = t;
ans = max(ans, max(p, -q));
} return ans;
} int main()
{
//freopen("in.txt", "r", stdin); scanf("%d", &n);
for(int i = ; i <= n; i++) scanf("%lf", a + i); //printf("%.7f\n%.7f\n", Calc(2), Calc(1.75)); double L = -1e5, R = 1e5, ans;
for(;;)
{
double t = (R - L) / 3.0;
double Lmid = L + t, Rmid = R - t;
double ansL = Calc(Lmid), ansR = Calc(Rmid); if(fabs(ansL - ansR) < eps) { ans = ansL; break; } if(ansL > ansR) L = Lmid;
else R = Rmid;
} printf("%.7f\n", ans); return ;
}
代码君
CodeForces Round #320 Div2的更多相关文章
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- Codeforces Round #564(div2)
Codeforces Round #564(div2) 本来以为是送分场,结果成了送命场. 菜是原罪 A SB题,上来读不懂题就交WA了一发,代码就不粘了 B 简单构造 很明显,\(n*n\)的矩阵可 ...
- Codeforces Round #361 div2
ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
- CodeForces Round 192 Div2
This is the first time I took part in Codeforces Competition.The only felt is that my IQ was contemp ...
- [Codeforces] Round #320 (Div.2)
1.前言 虽然这次我依旧没有参加正式比赛,但是事后还是看了看题目的...一般不怎么刷Codeforces. A.Raising Bacteria You are a lover of bacteria ...
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C. Weakness and Poorness 三分 dp
C. Weakness and Poorness Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
随机推荐
- wepy开发踩坑记录
与vue的不同 methods对象只存放tap等事件触发时的方法 events对象只存放$emit及$broadcast方法触发的事件 自定义方法及属性放在与methods平级的位置 props是动态 ...
- 实例练习——轮播图 & 全选/全不选
1 实例1:轮播图 1)实质就是改变图片的src 2)把图片的路径用数组存起来 3) “下一张”的实现就是改变数组的下标,用一个变量i控制,每次点击下标加1.“上一张”的实现正好相反.注意“i的变化” ...
- webAPP制作框架Ionic--构建APP侧边栏 底部选项卡 轮播图 加载动画
超好用的移动框架--Ionic Ionic是一个轻量的手机UI库,具有速度快,界面现代化.美观等特点. 为了解决其他一些UI库在手机上运行缓慢的问题,它直接放弃了IOS6和Android4.1以下的版 ...
- 网络文件系统(NFS)的使用
一.简介 NFS--Network FileSystem,即网络文件系统,主要功能是让网络上的不同操作系统之间共享数据. 远程服务器端共享出文件或目录,然后远羰共享出来的文件或目录就可通过挂 载的方式 ...
- uvm_reg_backdoor——寄存器模型(十)
寄存器有前门和后门两种访问方式,这儿只看后门访问方式 //----------------------------------------------------------------------- ...
- 使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)
项目以vue.js+layUI的作为前端开发技术栈,需要有一个在线的环境供项目成员实时查看效果,总不能每次都webpack打包发布后才能看到效果吧!刚开始就简单使用npm run dev命令热启动,但 ...
- BUG严重级别定义及注意事项
- 洛谷 P1784 数独
题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复.每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无 ...
- ArrayList 源码分析(JDK1.8)
ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess ...
- 2018.5.9 Oracle数据库查询命令
0.查询所有数据(最简单,但是时间很久) select * from emp; Result: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- - ...