题目链接:https://codeforces.com/contest/1363/problem/A 题意 判断是否能从 $n$ 个数中选 $x$ 个数加起来和为奇数. 题解 首先 $n$ 个数中至少需要有 $1$ 个奇数,之后为了不影响和的奇偶性向余下 $x-1$ 个数中加入成对的奇数或单个偶数即可. 代码 #include <bits/stdc++.h> using namespace std; void solve() { int n, x; cin >> n >>…
目录 A. Odd Selection B. Subsequence Hate C. Game On Leaves D. Guess The Maximums E. Tree Shuffling https://codeforces.com/contest/1363 A. Odd Selection 第一反应当然是分类讨论if到底.想了一下发现好像有点麻烦,正好n又不大所以for一下 枚举的方法,枚举原数组中取多少偶数(记为i),那么原数组中奇数就要取x-i个,只要判断x-i是否为奇数并且原数组…
B. Odd Sum Segments time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard output You are given an array a consisting of n integers a1,a2,-,an. You want to split it into exactly k non-empty non-intersecting…
题目链接:https://codeforces.com/contest/1363/problem/E 题意 有一棵 $n$ 个结点,根为结点 $1$ 的树,每个结点有一个选取代价 $a_i$,当前 $b_i$,目标数字 $c_i$ .每次可以选择以一个结点为根节点的子树中的 $k$ 个结点交换它们的 $b_i$,总代价为 $k \times a_{root}$ ,判断能否把所有结点都变为目标数字以及最小代价. 题解 因为每棵子树都可以被包含进更大的子树中,所以对于每棵子树的根节点,它的最小选取代…
题目链接:https://codeforces.com/contest/1363/problem/C 题意 有一棵 $n$ 个结点的树,每次只能取叶子结点,判断谁能最先取到结点 $x$ . 题解 除非结点 $x$ 一开始就为叶子结点,否则二人一定会取到只剩 $3$ 个结点,且中间结点为 $x$ 的情况. 所以,判断结点 $x$ 是否为叶子结点,否则再判断 $n - 3$ 的奇偶性即可. 代码 #include <bits/stdc++.h> using namespace std; void…
题目链接:https://codeforces.com/contest/1363/problem/B 题意 可以将 $01$ 串中的 $0$ 变为 $1$.$1$ 变为 $0$,问至少需要变换多少字符使得 $01$ 串中不含有 $010$ 或 $101$ 的子序列. 题解 不含有 $010$ 或 $101$ 的子序列即任意两个 $0$ 间没有 $1$.两个 $1$ 间没有 $0$ . 这样的 $01$ 串有两种情况: 连续的 $0$ $+$ 连续的 $1$ 连续的 $1$ $+$ 连续的 $0$…
具体思路已经在代码注释中给出,这里不再赘述. #include<iostream> #include<algorithm> using namespace std; int t; string s; int main() { cin >> t; while(t--) { cin >> s; int len = s.size(); int total0 = 0, total1 = 0; for(int i = 0; i < len; i++) { tot…
题意分析 关于这道题,意思就是两个人摘叶子,谁最后摘到编号为x的谁就赢了.既然是叶子,说明其最多只有一个分支,由于题目上说了是无向图,那就是度数小于等于的节点.也就是一步步移除度数小于等于的节点,直到将编号为的节点删掉游戏才结束. 那么我们可以将x这个节点作为根节点,初始时这棵树的样子如下: 两个人摘来摘去,谁也不想让对方赢,最终的结果必然是这个样子.(这是当节点总数大于等于3的情况) 这样我们就不难发现,当节点总数n大于等于3时,若n-3为偶数,那么最终肯定是后摘的那个人赢:反之就是先摘的那个…
题目链接:C.Game On Leaves 题意: 给你一个n个节点的无根树,你每次可以删除一个叶节点.如果谁先删除x号节点谁就赢了.两个人轮流操作 题解: 如果x号节点本身就是一个叶节点,那么谁先走,谁赢 否则,也就是只有剩下两个节点时候才能移动x号节点,只需要判断n-2的奇偶性就可以了 代码: #include<stdio.h> #include<algorithm> #include<iostream> #include<string> #includ…
题意: 给你n个节点,这n个节点构成了一颗以1为树根的树.每一个节点有一个初始值bi,从任意节点 i 的子树中选择任意k个节点,并按他的意愿随机排列这些节点中的数字,从而产生k⋅ai 的成本.对于一个节点i你需要将bi改成ci. 这个bi值和ci值的范围是[0,1] 题解: 对于一个节点,如果它的bi==ci,那么我们就不用管它(因为你改变它的值,那么肯定之后还要花费成本再改回来,增加了成本).那么我们首先找出来一共有多少个节点bi!=ci ,然后总权值肯定是 num1*a1+num2*a2..…