Codeforces Round #580 (Div. 2)
Posted vikyanite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #580 (Div. 2)相关的知识,希望对你有一定的参考价值。
A. Choose Two Numbers
题意:让你从A集合里取一个数a,B集合里也取一个数b,使得a+b同时不存在于集合A和集合B中
思路:直接取A和B集合中最大元素,最大元素相加必然不在A集合或者B集合里
#include <cstdio> #include <algorithm> #include <iostream> #include <cstring> using namespace std; int main() int n, m; scanf("%d", &n); int a[n]; for (int i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &m); int b[m]; for (int i = 0; i < m; i++) scanf("%d", &b[i]); printf("%d %d", *max_element(a, a+n), *max_element(b, b+m));
B.Make Product Equal One
题意:给你一段序列,让你经过k次操作后使得这个序列积为1。
思路:统计0的个数,统计小于等于-1的个数,之后分三种情况讨论:
1.负数个数为偶数:直接abs(abs(a[i])-1)遍历一遍即可
2.负数个数为奇数,且有0的存在:直接abs(abs(a[i])-1)遍历一遍即可(因为将要将其中一个-1转成1,0必然是要变成1或-1的所以不用考虑费用)
3.负数个数为奇数数,且0不存在:abs(abs(a[i])-1)遍历一遍之后+2即可(因为将要将其中一个-1转成1)
#include <cstdio> #include <algorithm> #include <iostream> #include <cstring> using namespace std; int main() int n; scanf("%d", &n); int a[n]; int cnt1 = 0, cnt0 = 0, mminus = 0x3f3f3f3f; for (int i = 0; i < n; i++) scanf("%d", &a[i]); if (a[i] < 0) cnt1++; if (abs(a[i]) < mminus) mminus = a[i]; if (a[i] == 0) cnt0++; if (cnt1 % 2 == 0) long long ans = 0; for (int i = 0; i < n; i++) ans += abs(abs(a[i])-1); printf("%lld\n", ans); return 0; else if (cnt0) long long ans = 0; for (int i = 0; i < n; i++) ans += abs(abs(a[i])-1); printf("%lld\n", ans); return 0; else long long ans = 0; for (int i = 0; i < n; i++) ans += abs(abs(a[i])-1); printf("%lld\n", ans+2); return 0;
C. Almost Equal
待补。
以上是关于Codeforces Round #580 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
C. Almost Equal ( Codeforces Round #580 (Div. 2) )
Codeforces Round #580 (Div. 2)
Codeforces Round #580 (Div. 2)
Codeforces Round #580 (Div. 2)赛后总结