Codeforces Round #618 (Div. 2) A~E
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处。
1300A. Non-zero
题意:给你一个数组,每次操作你可以使其中任意元素的值+1,问最少操作几次使得元素和、元素积都不为0
思路:因为积不为0,所以凡是值为0的元素我们都要将它+1,加完后若总和不为0,则操作结束,否则对任意元素 \(+1\) 即可
【AC Code】
const int N = 2e5 + 10;
int a[N];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int _; for (cin >> _; _--;) {
int n;
cin >> n;
int sum = 0, t = 0;
for (int i = 1; i <= n; ++i) {
cin >> a[i], sum += a[i];
if (!a[i]) t += 1;
}
sum += t;
if (sum == 0) cout << t + 1 << "\n";
else cout << t << "\n";
}
}
1300B. Assigning to Classes
题意:有2n个学生,每个学生都有自己的价值a[i],现你要将他们分配到两个班,使两个班学生价值的中位数相差尽可能小
思路:
先按照价值对学生排个序,因为每个人都必须被分配,所以很显然我们能控制差值离得最近的就是中间那两人
所以答案就是 \(a[n + 1] - a[n]\)
【AC Code】
const int N = 2e5 + 10;
int a[N];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int _; for (cin >> _; _--;) {
int n; cin >> n;
for (int i = 1; i <= 2 * n; ++i) cin >> a[i];
sort(a + 1, a + 1 + 2 * n);
cout << a[n + 1] - a[n] << "\n";
}
}
1300C. Anu Has a Function
题意:定义 \(f(x , y) = x | y - y\),给你一个数组,
你可以对它任意排序 问如何排序才能使 \(f ( f ( f ( f ( a[1] , a[2] ) , a[3] ) , a[4] ) , a[5])...\) 的值最大
思路:赛时没写出来
我们把 \(a|b-b\) 换成 \(a-a\&b\) ,也就是说使得 \(a\&b\) 最小,那我们考虑什么时候最大,
即所有数的最高位,只有一个为 \(1\) 不然一定在运算的过程中被削去,那么这个题就可以改成,在 \(32\) 位中找某一位只有一个数是 \(1\) 的那一个数,让他当第一。因为其余都会抵消。如果不存在,那么怎样输出都是 \(0\)
【AC Code】
const int N = 1e5 + 10;
int a[N];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int n; cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int j = 30; ~j; j -= 1) {
int cnt = 0, p;
for (int i = 1; i <= n; ++i)
if ((a[i] >> j) & 1) ++cnt, p = i;
if (cnt == 1) {
cout << a[p] << " ";
for (int k = 1; k <= n; ++k)
if (k != p) cout << a[k] << " ";
return 0;
}
}
cout << "\n";
for (int i = 1; i <= n; ++i) cout << a[i] << " ";
}
1300D. Aerodynamic
题意:给你一个多边形,你可以对它进行瞎操作,问你瞎操作后的多边形和原来的多边形是否相似
思路:结论很好猜,只要多边形满足中心对称就为相似(应该多数人都能猜到这个结论吧?),所以接下来只要判断多边形是否为中心对称就可以了
【AC Code】
using pii = pair<int, int>;
const int N = 2e5 + 10;
pii a[N];
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int n; cin >> n;
pii ans, now;
for (int i = 1; i <= n; ++i) cin >> a[i].first >> a[i].second, a[i].first <<= 1, a[i].second <<= 1;
if (n & 1) return printf("NO"), 0;
ans = {(a[1].first + a[1 + n / 2].first) >> 1, (a[1].second + a[1 + n / 2].second) >> 1};
for (int i = 1; i <= n / 2; ++i) {
now = {a[i].first + a[i + n / 2].first >> 1, a[i].second + a[i + n / 2].second >> 1};
if (now != ans) return printf("NO"), 0;
}
cout << "YES";
}
1300E. Water Balance
题意:给你一个序列,你可以选择任意区间使这个区间内每个数的值变为区间内元素的平均值,要求你输出可以形成的字典序最小的序列
思路:赛时没写出来
这道题其实可以这样做,我们先把第 \(i\) 个数归类到第 \([i , i]\) 个区间,并令第 \(i\) 个区间的平均值为 \(a[i]\) ,然后从第二个区间开始比较当前区间和前一个区间的平均值。
若当前区间的平均值小于上一个区间的平均值,则我们对上一个区间更新平均值,然后用上一个区间再对上上个区间更新。
若当前区间的平均值大于等于上一个区间的平均值,则停止更新。
因为最坏情况每个区间都要从后往前更新所有区间,而答案又满足单调性,所以我们可以用单调栈维护区间左端点右端点优化一下复杂度。
【AC Code】
const int N = 1e6 + 10;
struct node {
double ave;
int l, r;
} q[N];
double ans[N], a[N];
int main() {
// ios::sync_with_stdio(false), cin.tie(nullptr);
int n, top;
cin >> n;
for (int i = 1 ; i <= n ; i ++) cin >> a[i];
q[++ top] = {a[1], 1, 1};
for (int i = 2 ; i <= n ; i ++) {
q[++ top] = {a[i], i, i};
while (top > 1 && q[top].ave < q[top - 1].ave) {
int l = q[top].l, r = q[top].r, pl = q[top - 1].l, pr = q[top - 1].r;
q[top - 1].ave = (q[top].ave * (r - l + 1) + q[top - 1].ave * (pr - pl + 1)) / (r - pl + 1);
q[top - 1].r = r;
top -- ;
}
}
for (int i = 1 ; i <= top ; i ++)
for (int j = q[i].l ; j <= q[i].r ; j ++)
ans[j] = q[i].ave;
for (int i = 1 ; i <= n ; i ++) printf("%.12lf\n", ans[i]);
cout << '\n';
}
Codeforces Round #618 (Div. 2) A~E的更多相关文章
- Codeforces Round #618 (Div. 2)
题库链接 https://codeforces.ml/contest/1300 A. Non-zero 一个数组,每次操作可以给某个数加1,让这个数组的积和和不为0的最小操作数 显然如果有0的话,必须 ...
- Codeforces Round #618 (Div. 1)C(贪心)
把所有数看作N块,后面的块比前面的块小的话就合并,这个过程可能会有很多次,因为后面合并后会把前面的块均摊地更小,可能会影响更前面地块,像是多米诺骨牌效应,从后向前推 #define HAVE_STRU ...
- Codeforces Round #618 (Div. 1)B(几何,观察规律)
观察猜测这个图形是中心对称图形是则YES,否则NO #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace ...
- Codeforces Round #618 (Div. 1)A(观察规律)
实际上函数值为x&(-y) 答案仅和第一个数字放谁有关 #define HAVE_STRUCT_TIMESPEC #include <bits/stdc++.h> using na ...
- Codeforces Round #618 (Div. 2)A. Non-zero
Guy-Manuel and Thomas have an array aa of nn integers [a1,a2,…,an ]. In one step they can add 11 to ...
- Codeforces Round #618 (Div. 2)C. Anu Has a Function
Anu has created her own function ff : f(x,y)=(x|y)−y where || denotes the bitwise OR operation. For ...
- Codeforces Round #618 (Div. 2) 小号上紫之路
这一场涨了不少,题也比较偏思维,正好适合我 A. Non-zero 我们记录这些数字的总和sum,并且记录0的个数zero,显然答案应该是这些0的个数,注意如果sum+zero==0的话答案要额外加一 ...
- [CF百场计划]#2 Codeforces Round #618 (Div. 2)
A. Non-zero Description: Guy-Manuel and Thomas have an array \(a\) of \(n\) integers [\(a_1, a_2, \d ...
- Codeforces Round #618 (Div. 2)-B. Assigning to Classes
Reminder: the median of the array [a1,a2,-,a2k+1] of odd number of elements is defined as follows: l ...
- Codeforces Round #618 (Div. 2)-Non-zero
Guy-Manuel and Thomas have an array a of n integers [a1,a2,-,an]. In one step they can add 1 to any ...
随机推荐
- 使用C#将几个Excel文件合并去重分类
需要将几个Excel表格里面的数据去重,然后将每个站点的数据另存为一张Sheet上. 几个表格如下所示: 实现效果如下所示: 具体实现 需要使用EPPlus操作Excel 安装EPPlus如下所示: ...
- python内置模块——logging
内置模块-logging loging模块是python提供的内置模块,用来做日志处理. 日志等级: 等级 释义 级别数值 CRITICAL(fatal) 致命错误,程序根本跑不起来 50 ERROR ...
- GitHub、Google等镜像加速地址收集
摘要 本文用于收集GitHub.Google等镜像/加速地址. GitHub GitHub加速地址一览 fastgithub Https://www.fastgithub.com/(推荐) 站源 地址 ...
- mybits_基础
1.框架:一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求 2.ORM:对象关系映射,数据和实体对象的映射 3.MyBatis:是一个优秀的基于Java的持久层框架,它内部封装了JD ...
- 高斯朴素贝叶斯(Gaussian Naive Bayes)原理与实现——垃圾邮件识别实战
朴素贝叶斯(Naive Bayes): 根据贝叶斯定理和朴素假设提出的朴素贝叶斯模型. 贝叶斯定理: 朴素假设(特征条件独立性假设): 代入可知朴素贝叶斯模型计算公式: 因为朴素贝叶斯是用来分类任务, ...
- 【内核】ELF 文件执行流程
# ELF 文件分类 Linux中,ELF文件全称为:Executable and Linkable Format,主要有三种形式,分别是: 可执行文件 动态库文件(共享文件 .so) 目标文件(可重 ...
- 【Python微信机器人】第六七篇: 封装32位和64位Python hook框架实战打印微信日志
目录修整 目前的系列目录(后面会根据实际情况变动): 在windows11上编译python 将python注入到其他进程并运行 注入Python并使用ctypes主动调用进程内的函数和读取内存结构体 ...
- 【C#】【串口通信(Serial Port)】无法使用(using System.IO.Ports;)命名空间<Error:SerialPort不存在上下文>
1.包缺失导致--安装相应包: 2.等待命令行初始化--输入命令: Install-Package Microsoft.Windows.Compatibility -Version 5.0.2 参考网 ...
- MinIO客户端之diff
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc diff 检查指定桶内对象清单的差异,注意不比较对象内容的差异,命令如下: ./mc diff local1 ...
- 从零玩转xxl-job分布式任务调度-xxl-job
title: 从零玩转xxl-job分布式任务调度 date: 2022-03-18 00:11:55.443 updated: 2023-01-05 10:58:06.991 url: https: ...