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 ...
随机推荐
- Linux netstat命令详解和使用例子(显示各种网络相关信息)
netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...
- Java中的break循环——通过示例学习Java编程(13)
作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=24 break语句通常用于以下两种情况: (A)使 ...
- 啊哈算法之宽搜BFS解救小哈
简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目——BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...
- SpringBoot 2.x (15):Actuator监控
Actuator监控:SpringBoot自带的,对生成环境进行监控的系统 使用:既然是监控,那就不能监控一个空项目 这里我使用SpringBoot整合MyBatis的Demo: https://ww ...
- 使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)
项目以vue.js+layUI的作为前端开发技术栈,需要有一个在线的环境供项目成员实时查看效果,总不能每次都webpack打包发布后才能看到效果吧!刚开始就简单使用npm run dev命令热启动,但 ...
- 深度探索C++对象模型——关于对象
引言 以前读<C++ Primer>的时候一直有一种感觉:该书虽然是C++入门书籍,初学者读之却觉晦涩,越往后读越是如此.等到稍加理解后再读该书,顿感醍醐灌顶,茅塞顿开.究其原因,在于原作 ...
- js构造方法
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Java ...
- HDU - 5457 Hold Your Hand (Trie + 最小割)
Hold Your Hand Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 65535/102400 K (Java/Others)T ...
- 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).满足条件的 ...
- Leetcode重点 250题-前400 题
删除不常考,面试低频出现题目 删除重复代码题目(例:链表反转206题,代码在234题出现过) 删除过于简单题目(例:100题:Same Tree) 删除题意不同,代码基本相同题目(例:136 & ...