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 ...
随机推荐
- 再学Blazor——组件建造者
使用 RenderTreeBuilder 创建组件是 Blazor 的一种高级方案.前几篇文中有这样创建组件的示例 builder.Component<MyComponent>().Bui ...
- 【译】Visual Studio 2022 - 17.8 的性能改进
Visual Studio 2022 17.8版本欢迎一系列令人振奋的性能增强,包括响应式文件打开体验,改进 Razor/Blazor 的响应性,加速 F5,优化的 C++ 虚幻引擎智能感知和非 SD ...
- Vue01-简介与入门
Vue 01. 简介 1.1 前端三大框架 目前前端最流行的三大框架: Vue React angular 1.2 Vue简介 Vue (读音 /vjuː/,类似于 view) ,也可以写成Vue.j ...
- Bash—source命令&export命令&bashrc文件
当不使用 source 命令执行脚本时,会创建一个子 shell,在该子 shell 中执行完脚本后退出子 shell.不是用 export 定义的变量只对该 shell 有效,对子 shell 是无 ...
- 每天5分钟复习OpenStack(十二)Ceph FileStore 和 BlueSotre
一个最小化的Ceph集群需要三个组件MON MGR OSD.上一章我们部署了MON,本章节我们完成剩下MGR 和OSD 的部署.在文末我们将重点介绍下什么是FileStore和BlueStore,并详 ...
- C++ Qt开发:PushButton按钮组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QPushBu ...
- 测试框架TestNG学习笔记
目录 一.TestNG的基本介绍和如何在maven中引用 二.TestNG基本注解与执行顺序实战 2.1 注解实战 @Test标签 2.2 注解实战 BeforeMethod和AfterMethod ...
- IDEA将JavaFx打包为exe Win+Mac+Linux多平台分发等等
IDEA将JavaFx打包为exe Win+Mac+Linux多平台分发等等 前面介绍到了用packr打包javafx17为exe多平台分发,比较复杂,这篇则介绍用idea直接打包exe,比较简单,但 ...
- 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 02.AI自定义任务和观察器中断
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本文章对应课程第十一章 42节.这篇文章会进一步地为AI添加新功能,创建自定义任务,允许AI发射子弹,并且讲解观 ...
- CodeForces 1459C 数论 GCD
CodeForces 1459C 数论 GCD 原题链接 题意 首先给出n个数 之后给出m个数,每次问之前的n个数加上当前的这个数之后,总体的gcd是多少,也就是答案需要求出m个总体的gcd 思路 因 ...