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. Modbus转PROFIBUS DP 通信网关-应用案例

    针对西门子S7系列的PLC,通用串口/PROFIBUS-DP网关(PM-160)为建立西门子PLC与现场RS232/485设备的连接提供了理想解决方案

  2. 公司oa是什么?一般公司oa有什么样功能?

    公司OA(Office Automation)是指通过计算机和信息技术来实现办公自动化的系统. 它提供了一系列的功能和工具,用于协调.管理和处理公司内部的日常事务和流程.OA系统旨在提高工作效率.加强 ...

  3. 串ababaaababaa的next和串ababaabab的nextval

    这个next求法我看了视频和网上的,发现有两种求法,一种是求最左边和最右边相等的最大个数, 就比如说串ababaaababaa,这个 所以这个3的位置为1,依次下来. 这个唯一要注意的是,是按照你选择 ...

  4. [ABC246D] 2-variable Function

    Problem Statement Given an integer $N$, find the smallest integer $X$ that satisfies all of the cond ...

  5. 基于winform(C#)的飞鸟小游戏

    本项目是一款基于C# (winform)版本的飞鸟小游戏,是一款益智类游戏 其效果如下图所示 如上图所示为飞鸟游戏的初始化界面: 可以看到游戏包含了四个功能: 启动 注册 登陆 排行榜 启动:是用于开 ...

  6. 7、If分支语句

    1.程序的流程结构 程序的流程控制结构一共有三种: 顺序结构 选择结构 循环结构. 顺序结构: 从上向下 逐行执行 选择结构:条件满足,某些代码才会执行.0-1次 分支语句: if,switch,se ...

  7. Java8新特性之-Map

    Map一些新方法的具体使用案例 1.getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.th ...

  8. .NET Conf China 2023 活动纪实 抢先看

    ​ 今天2023年12月16日.NET Conf China 2023举办的日子,北京昨天上午还在飘起雪花,到今天早上的天气就有了极大的改观,大清早就能看到外面徐徐升起的朝阳,这也预示着今天将是一个大 ...

  9. Rocketmq学习1——Rocketmq架构&消息存储&刷盘机制

    系列文章目录和关于我 一丶什么是Rocketmq RocketMQ是一款开源的分布式消息中间件,由阿里巴巴团队最初开发,并于2016年贡献给Apache软件基金会,后成为Apache顶级项目.Rock ...

  10. MySQL 基础(四)锁

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