原作者为 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的更多相关文章

  1. Codeforces Round #618 (Div. 2)

    题库链接 https://codeforces.ml/contest/1300 A. Non-zero 一个数组,每次操作可以给某个数加1,让这个数组的积和和不为0的最小操作数 显然如果有0的话,必须 ...

  2. Codeforces Round #618 (Div. 1)C(贪心)

    把所有数看作N块,后面的块比前面的块小的话就合并,这个过程可能会有很多次,因为后面合并后会把前面的块均摊地更小,可能会影响更前面地块,像是多米诺骨牌效应,从后向前推 #define HAVE_STRU ...

  3. Codeforces Round #618 (Div. 1)B(几何,观察规律)

    观察猜测这个图形是中心对称图形是则YES,否则NO #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace ...

  4. Codeforces Round #618 (Div. 1)A(观察规律)

    实际上函数值为x&(-y) 答案仅和第一个数字放谁有关 #define HAVE_STRUCT_TIMESPEC #include <bits/stdc++.h> using na ...

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

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

  7. Codeforces Round #618 (Div. 2) 小号上紫之路

    这一场涨了不少,题也比较偏思维,正好适合我 A. Non-zero 我们记录这些数字的总和sum,并且记录0的个数zero,显然答案应该是这些0的个数,注意如果sum+zero==0的话答案要额外加一 ...

  8. [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 ...

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

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

随机推荐

  1. Vue打包发布

    打包发布 目标:明确打包的作用 说明:vue脚手架只是开发过程中,协助开发的工具,当真正开发完了,脚手架不参与上线 打包的作用: 将多个文件压缩合并成一个文件 语法降级 less sass ts 语法 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (150)-- 算法导论12.2 6题

    六.用go语言,考虑一棵二叉搜索树 T ,其关键字互不相同.证明:如果 T 中一个结点 x 的右子树为空,且 x 有一个后继 y ,那么 y 一定是 x 的最底层祖先,并且其左孩子也是 x 的祖先.( ...

  3. 详细一些的vue生命周期

    如果你和我一样,以前对vue生命周期的理解仅限于生命周期钩子,那么本文可以让我们更深入一层,理解vue在生命周期各个阶段所做的事,对我们对vue的理解和使用很有好处. (1)通过new Vue()创建 ...

  4. ubuntu防火墙ufw基本使用方法

    ubuntu系统基本使用方法 防火墙 # 查看服务器防火墙状态 ufw status # 将防火墙设置为可用状态 ufw enable # 将防火墙设置为关闭状态 ufw disbale # 放行端口 ...

  5. .NET周刊【12月第1期 2023-12-06】

    国内文章 .NET 与 OpenEuler 共展翅,昇腾九万里 https://www.cnblogs.com/shanyou/p/17858385.html 本文介绍了openEuler操作系统,它 ...

  6. 神经网络优化篇:为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitting?)

    为什么正则化有利于预防过拟合呢? 通过两个例子来直观体会一下. 左图是高偏差,右图是高方差,中间是Just Right. 现在来看下这个庞大的深度拟合神经网络.知道这张图不够大,深度也不够,但可以想象 ...

  7. bash shell笔记整理——basename和dirname命令

    bashname命令作用 去掉给定name的目录部分,如果指定了 SUFFIX, 就 同时去掉SUFFIX(后缀).具体看示例吧. bashname语法 Usage: basename NAME [S ...

  8. Cisco 交换机利用CDP数据自动绘制网络拓扑图[drawio]-实践

    进行网络运维,必须对网络拓扑情况进行详细的掌握,但是网络改动后,更新网络拓扑比较繁琐,维护人员容易懈怠,久而久之,通过人工绘制的网络拓扑很容易与现有网络出现偏差. 现在,可以通过python 丰富的库 ...

  9. PBKDF2(Password-Based Key Derivation Function 2)算法

    一.引言 在当今数字时代,保护用户数据和隐私的安全变得越来越重要.为实现这一目标,加密和密钥管理技术发挥着关键作用.PBKDF2(Password-Based Key Derivation Funct ...

  10. 分享.Net 设计模式大全

    由于最近项目处于维护阶段,工作没有那么匆忙了.于是开始回头整理一下常用设计模式. 虽说设计模式大家都知道,但是在写代码过程中为了抓项目进度有时候写着写着就变成面向过程开发了--后面维护起来将会相当的悲 ...