1516A. Tit for Tat

題意:

給定大小為 \(n\) 的數組和可操作次數 \(k\) ,

  • 每次操作都選定兩個數(如果 \(1 \le a_i\) ),使第一個數 - \(1\) ,另一個數 + \(1\)

輸出字典序最小的數組

思路:

既然要輸出字典序最小,那麽肯定是選最前面 - 1,最後 + 1

void solve() {
int n, k;
cin >> n >> k;
int a[n + 1];
for (int i = 1; i <= n; ++i) cin >> a[i];
int i = 1, j = n;
while (true) {
if (i == j || k == 0) break;
if (a[i] >= 1) a[i] -= 1, a[j] += 1, k--;
else
i++;
}
for (int i = 1; i <= n; ++i) cout << a[i] << " ";
cout << "\n";
}

1516B. AGAGA XOOORRR

題意:

思路:

我采取的方法是模擬,首先求出全部元素的 XOR 結果,如果 \(s = 0\) 則是元素兩兩相等的情況比如:\(0,2,2,1,1,3,3...\) 此時輸出 YES 即可。

維護 \(t\) 如果 \(t == s\) 則説明前面已使用的一段可以 XOR 為同一個值,此時 \(t = 0,cnt += 1\)

如果最後 cnt > 2 && t == 0 則説明數組完全可以通過 XOR 操作簡化為相同的值

void solve() {
int n;
cin >> n;
vector<int> a(n);
for (int &x : a) cin >> x;
int s = 0;
for (int x : a) s ^= x;
if (s == 0) {
cout << "YES\n";
return;
}
int t = 0, cnt = 0;
for (int i = 0; i < n; ++i) {
t ^= a[i];
if (t == s) cnt++, t = 0;
}
if (cnt > 2 && t == 0) cout << "YES\n";
else
cout << "NO\n";
}

下面代碼為官方 AC 代碼:

void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1, x; i <= n; ++i) {
cin >> x;
a[i] = a[i - 1] ^ x;
}
bool f = !a[n];
for (int i = 1; i <= n; ++i)
for (int j = i + 1; j <= n; ++j)
f |= (a[i] == (a[j] ^ a[i]) && a[i] == (a[n] ^ a[j]));
cout << (f ? "YES\n" : "NO\n");
}

1516C. Baby Ehab Partitions Again

題意:

將數組劃分為兩個子序列,如果存在兩個子序列之和相等則被稱爲 “好數組” 現在請問是否能刪除幾個元素使得數組不是 “好數組”

思路:

首先,让我们检查一下数组是否已经很好。 这可以通过背包dp完成。 如果是,则答案为0。否则,可以始终删除一个元素以使其良好,这是找到它的方法:由于可以对数组进行分区,因此其总和为偶数。 因此,如果我们删除一个奇数元素,它将是奇数,并且将无法对其进行分区。 如果没有奇数元素,那么所有元素都是偶数。 但是,您可以将所有元素除以2,而无需更改答案。 为什么? 因为将所有内容都除以2后在新数组中进行的分区就是在原始数组中进行的分区,反之亦然。 我们只是重新缩放了一切。 因此,当所有元素都是偶数时,您可以继续除以2,直到其中一个元素变为奇数。 删除它,您就完成了。 如果您想用一句话来解决,请删除可能的最小有效位最小的元素。

另外,出于类似的推理,您可以先将整个数组除以其gcd,然后删除任何奇数元素(因为gcd为1,该元素必须存在)

int dp[200010];
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
int d = 0;
for (int i = 1; i <= n; ++i) cin >> a[i], d = __gcd(d, a[i]);
for (int i = 1; i <= n; ++i) a[i] /= d;
dp[0] = 1;
int S = 0, id = 0;
for (int i = 1; i <= n; ++i) {
S += a[i];
if (a[i] & 1) id = i;
for (int j = S; j >= a[i]; j--) dp[j] |= dp[j - a[i]];
}
if (S & 1 || dp[S / 2] == 0) cout << "0";
else
cout << "1\n"
<< id;
}

Codeforces Round #717 (Div. 2) 个人题解 A~C (A思維,B位運算,C背包DP)的更多相关文章

  1. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  2. Codeforces Round #557 (Div. 1) 简要题解

    Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...

  3. Codeforces Round #540 (Div. 3) 部分题解

    Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...

  4. Codeforces Round #538 (Div. 2) (A-E题解)

    Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ...

  5. Codeforces Round #531 (Div. 3) ABCDEF题解

    Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...

  6. Codeforces Round #527 (Div. 3) ABCDEF题解

    Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...

  7. Codeforces Round #499 (Div. 1)部分题解(B,C,D)

    Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ...

  8. Codeforces Round #545 (Div. 1) 简要题解

    这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...

  9. Codeforces Round #624 (Div. 3)(题解)

    Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...

  10. Codeforces Round #821(Div.2) (A-C) 题解

    Codeforces Round #821(Div.2) (A-C) A.Consecutive Sum 大致题意 给定一组共 n 个数据 ,如果俩个数的下标在 mod k 意义下同余,则可以交换a[ ...

随机推荐

  1. 方法覆盖Override

    继承作用: 基本作用:代码复用 重要作用:方法覆盖和多态机制 ===================================================================== ...

  2. [AI]生物本能vs机器人工程:谁才有“意识”?

    [AI]生物本能vs机器人工程:谁才有"意识"? 引子 我们已经就人类意识的初级形式和高级形式进行了初步探讨.通过对比分析,我们将初级意识定义为可以无需高级意识参与的本能反应.而高 ...

  3. RAM 低功耗

    常见的ram低功耗方法包括的shutdown信号,1 关闭,0不关闭正常功能. ls低睡眠,深度睡眠. 关闭时节省90%功耗,数据丢失. 重新启动需要50ns以上. ram clk +gate

  4. GZY.Quartz.MUI(基于Quartz的UI可视化操作组件) 2.6.0发布 兼容.Net8.0

    前言 为了迎接.Net8.0 2.6.0终于发布了~ 更新内容: 兼容.NET8.0 新增界面按分组名称排序功能 优化本地持久化时文件路径异常的问题 优化数据库持久化时偶现的异常问题 新增简易授权,增 ...

  5. Cesium最简单的视效升级方案,无需修改代码即可实现

    Cesium依靠其开源免费的特点基本上完全垄断了GIS这一块,并且其中99%的用户都是使用的CesiumJS,然而,对于一些使用Cesium的项目来说,要想升级视效可能需要进行繁琐的代码修改,增加了开 ...

  6. java断言机制(assert)

    java断言机制(assert) 概述 断言使用的时候不是很多,测试时会使用,springboot中也有使用,总的来说断言还是要慎重. 在Java中,同样也有assert关键字,表示断言 在Java中 ...

  7. 人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包

    人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包 工作上要将kingbaseV8数据库整合到项目,我在官网找了半天,连个jdbc驱动包下载入口都找不到,简直就是官方文档毫无诚 ...

  8. java实现一个录像大师

    java实现一个录像大师 javacv从入门到入土系列,发现了个好玩的东西,视频处理,于是我想搞了个屏幕录屏大师,这里我使用javafx进行页面显示. 依赖 <!-- 需要注意,javacv主要 ...

  9. MySQL 基础(四)锁

    解决并发事务带来的问题 写-写情况 任意一种事务隔离级别都不允许 "脏写" 的发生,因为这样会使得数据混乱.所以,当多个未提交的事务相继对一条记录进行改动时,就需要使得这些事务串行 ...

  10. 手把手带你做LiteOS的树莓派移植

    摘要:树莓派是英国的慈善组织"Raspberry Pi 基金会"开发的一款基于arm的微型电脑主板.本文介绍基于LiteOS的树莓派移植过程. 本文分享自华为云社区<2021 ...