奇偶性

codeforces1251C 奇偶性

巧了我就是萌 提交于 2019-12-16 09:23:28
题意:有一个序列,如果相邻的两个数的奇偶性不同,就可以把它们交换。问得到的最小的序列是什么。 题目 不管怎么交换,会发现所有的偶数的相对位置是不变的,所有的奇数的相对位置也是不变的。那么要获得最小的序列,就应该按顺序取出一个奇数和一个偶数,把它们中较小的那个加入答案中,最后把剩下的全部加入答案中,和归并排序有点像。 #pragma warning(disable:4996) #include<climits> #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<set> #include<queue> #include<string> using namespace std; typedef long long ll; char s[300005]; int a1[300005],a0[300005],ans[300005]; int main() { int T,i0,i1,t1,t0,L,i,j; scanf("%d",&T); while(T--) { scanf("%s",s); L=strlen(s); t1=0;t0=0;//t1和t0是奇数和偶数的总个数 for(i=0;i<L;i++) { if((s[i]-'0')%2==0

CF1237E 【Balanced Binary Search Trees】

丶灬走出姿态 提交于 2019-12-03 02:48:47
首先我们要注意到一个性质:由于根与右子树的根奇偶性相同,那么根的奇偶性与 \(N\) 相同 然后我们发现对于一个完美树,他的左右两个儿子都是完美树 也就是说,一颗完美树是由两棵完美树拼成的 注意到另一个性质:由于权值是一个排列,假设根节点为 \(x\) ,那么左子树的范围是 \([1, x - 1]\) ,右子树为 \([x + 1, n]\) 由于根节点和 \(N\) 奇偶性相同,那么左子树的大小与 \(N\) 的奇偶性相反,所以右子树大小为偶数 如果子树区间为 \([l, r]\) ,那么其实可以把它看成 \([1, r - l + 1]\) ,所以只和子树大小有关,和子树权值无关 手玩一波小数据: 当 \(N=1\) 时,就是一个点 当 \(N=2\) 时,二为根,一为根的左子树 当 \(N=3/4\) 时为样例 当 \(N=5\) 时,可以用两个2的子树拼成 然后我们发现,能作为右子树的只有 \(2/4\) ,前五个都不是满二叉树,所以我们可以合并两颗树,当且仅当两个二叉树高度相同 发现2的高度为2,没有与之相同树高的树,所以能作为右子树的只有 \(4\) 所以我们就有:用 \(4/5\) 可以凑出 \(9/10\) , \(9/10\) 又可以拼出 \(19/20\) …… 所以我们就可以用 \(4/5\) 一路递推下去,发现每次都*了 \(2\) ,所以复杂度为 \(O

6-12 判断奇偶性

匿名 (未验证) 提交于 2019-12-03 00:28:02
本题要求实现判断给定整数奇偶性的函数。 函数接口定义: int even( int n ); 其中 n 是用户传入的整型参数。当 n 为偶数时,函数返回1; n 为奇数时返回0。注意:0是偶数。 裁判测试程序样例: #include <stdio.h> int even( int n ); int main() { int n; scanf("%d", &n); if (even(n)) printf("%d is even.\n", n); else printf("%d is odd.\n", n); return 0; } /* 你的代码将被嵌在这里 */ 输入样例1: -6 输出样例1: -6 is even. 输入样例2: 5 输出样例2: 5 is odd. int even( int n ) { } 文章来源: 6-12 判断奇偶性

“扩展域”与“边带权”并查集

匿名 (未验证) 提交于 2019-12-02 23:40:02
版权声明:个人笔记,仅供复习 https://blog.csdn.net/weixin_41162823/article/details/91439790 前置知识 并查集 路径压缩与按秩合并 “边带权”并查集 并查集实际上是由若干棵树构成的森林,我们可以在树中的每条边上记录一个权值,即维护一个数组d,用d[x]保存节点x到父节点fa[x]之前的边权。在每次路径压缩后,每个访问过的节点都会直接指向树根,如果我们同时更新这些节点的d值,就可以利用路径压缩的过程来统计每个节点到树根之间的路径上的一些信息。这就是所谓“边带权” 的并查集。 例题: POJ1773 题目描述:见《算法竞赛进阶指南》P190 解题思路1:边带权 本题可作为“边带权”和“扩展域”模板题整理。与一般的并查集不同的是,本题传递关系不止一种: 若x1和x2奇偶性相同,x2与x3奇偶性也相同,则x1与x3奇偶性相同。 若x1和x2奇偶性相同,x2与x3奇偶性不同,则x1与x3奇偶性不同。 若x1和x2奇偶性不同,x2与x3奇偶性不同,则x1与x3奇偶性相同。 另外,本题的N太大,而M却很小,可以使用离散化方法,所以顺便复习一下离散化。 为了处理本题的多种传递关系,我们可以采用一种“边带权”的并查集。具体操作是用边权d[x] = 0 表示 x 与 par[x] 奇偶性相同;为1表示 x 与 par[x] 奇偶性不同

字符串的奇偶性

纵然是瞬间 提交于 2019-12-02 11:59:05
题目描述 我们把只有0和1组成的字符串叫做比特字符串。如果比特字符串中1的个数为奇数,则称这个比特字符串是奇性的。如果比特字符串中1的个数为偶数,则称这个比特字符串是偶性的。 注意: (1)0是偶数,所以不包含1的比特字符串是偶性的。 (2)0的个数不影响比特字符串的奇偶性。 输入 输入包含多组测试数据。每组数据由1~31个0、1组成,最后跟一个小写字母e或o,e表示此比特字符串应为偶性,o表示此比特字符串应为奇性。 当输入#时,表示输入结束。 输出 每组输入对应一个输出,你应该将最后的字母替换成0或1,使得此比特字符串符合输入时确定的奇偶性。 样例输入 101e 010010o 1e 000e 110100101o 样例输出 1010 0100101 11 0000 1101001010 代码 # include <stdio.h> # include <iostream> using namespace std ; int main ( ) { char str [ 32 ] ; while ( ~ scanf ( "%s" , str ) && str [ 0 ] != '#' ) { int num = 0 ; for ( int i = 0 ; str [ i ] != '\0' ; i ++ ) { if ( str [ i ] == '1' ) { num ++ ;

软考中级1

穿精又带淫゛_ 提交于 2019-11-30 17:49:51
尼奎斯特取样定理:如果取样速率大于 模拟信号 最高频率的2倍,则可以用得到的样本恢复原来的模拟信号。 海明码:利用 奇偶性 来检错和校验的方法。假设有m位信息码,加入k位校验码,则满足m+k+1<=2k,使不等式成立的x的最小值就是校验码的位数。 来源: https://www.cnblogs.com/sq5288/p/11605858.html

AcWing:239. 奇偶游戏(前缀和 + 离散化 + 带权并查集 + 异或性质)

蹲街弑〆低调 提交于 2019-11-28 05:49:59
小A和小B在玩一个游戏。 首先,小A写了一个由0和1组成的序列S,长度为N。 然后,小B向小A提出了M个问题。 在每个问题中,小B指定两个数 l 和 r,小A回答 S[l~r] 中有奇数个1还是偶数个1。 机智的小B发现小A有可能在撒谎。 例如,小A曾经回答过 S[1~3] 中有奇数个1, S[4~6] 中有偶数个1,现在又回答 S[1~6] 中有偶数个1,显然这是自相矛盾的。 请你帮助小B检查这M个答案,并指出在至少多少个回答之后可以确定小A一定在撒谎。 即求出一个最小的k,使得01序列S满足第1~k个回答,但不满足第1~k+1个回答。 输入格式 第一行包含一个整数N,表示01序列长度。 第二行包含一个整数M,表示问题数量。 接下来M行,每行包含一组问答:两个整数l和r,以及回答“even”或“odd”,用以描述S[l~r] 中有奇数个1还是偶数个1。 输出格式 输出一个整数k,表示01序列满足第1~k个回答,但不满足第1~k+1个回答,如果01序列满足所有回答,则输出问题总数量。 数据范围 N ≤ 10 9 , M ≤ 10000 N≤109,M≤10000 输入样例: 10 5 1 2 even 3 4 odd 5 6 even 1 6 even 7 10 odd 输出样例: 3 题解:如果我们用sum数组表示序列S的前缀和,那么在每个回答中:   1、S[l ~ r]