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. force语句

    类似于assign,用于调试,可以强制给赋值,放在initial后,可以穿透到最内部模块. force (强制赋值操作)与 release(取消强制赋值)表示第二类过程连续赋值语句. 使用方法和效果, ...

  2. k8s安装Ingress-Nginx

    目前,DHorse(https://gitee.com/i512team/dhorse)只支持Ingress-nginx的Ingress实现,下面介绍Ingress-nginx的安装过程. 下载安装文 ...

  3. JUC——让步与优先级

    Thread.yield():方法作用是:暂停当前正在执行的线程对象(及放弃当前拥有的cup资源),并执行其他线程 yield():做的是让当前运行线程回到可运行的状态,以允许具有相同优先级的其他线程 ...

  4. Tensorflow2.0实战之GAN

    本文主要带领读者了解生成对抗神经网络(GAN),并使用提供的face数据集训练网络 GAN 入门 自 2014 年 Ian Goodfellow 的<生成对抗网络(Generative Adve ...

  5. TypeError: 'module' object is not callable (pytorch在进行MNIST数据集预览时出现的错误)

    在使用pytorch在对MNIST数据集进行预览时,出现了TypeError: 'module' object is not callable的错误: 上报错信息图如下: 从图中可以看出,报错位置为第 ...

  6. tensorflow GPU版本配置加速环境

    import tensorflow as tf tf.test.is_gpu_available() 背景 环境:Anaconda .tensorflow_gpu==1.4.0 (这里就用1.4.0版 ...

  7. 可视化学习:CSS transform与仿射变换

    引言 在几年前,我就在一些博客中看到关于CSS中transform的分析,讲到它与线性代数中矩阵的关系,但当时由于使用transform比较少,再加上我毕竟是个数学学渣,对数学有点畏难心理,就有点看不 ...

  8. 华企盾DSC可能涉及的Linux命令

    掌握Linux系统的基本命令 详细使用请参考:Linux命令大全 uname 查看系统信息 wget 文件下载 chmod 改变文件或目录权限 ls 显示指定工作目录下的内容及属性信息 cd 切换当前 ...

  9. StringBuilder、StringBuffer

    StringBuilder 1.concat() 拼接字符串 2.indexOf() 查找 3.replace() 替换 4.subString(1,2) 截取 0,1,2 1开始 2结束 Strin ...

  10. EvilBox : ONE - WriteUp

    EvilBox : ONE 信息收集 扫描网段内存活主机,得到目标 nmap 进一步收集有效信息,只开放了22和80 访问80的页面没有什么有效信息 接着扫一下目录, 没有敏感的文件 在robots中 ...