位统计法的应用
来源:互联网 发布:开普勒第一定律知乎 编辑:程序博客网 时间:2024/06/07 07:37
本文根据微信公众号算法团子的文章总结得到。
题目描述:在一堆正整数中,有一个数恰好出现了B次,而其他的数均出现了A次,一共N个数,求出那出现B次的数,数据保证有解,设题目的输入为:第一行3个正整数,n,a,b(b<a),第二行n个正整数,所有的数均在int范围之内。输出那个出现b次的数。
分析:采用位统计法解决此类问题。所有数的大小都在int范围内,所以数字的长度不超过10位,开一个10*10的二维数组,用来统计,所有数字中出现在从第一位(个位)到第10位每一位上0~9这个10个数字每个数字出现的次数。
由于只有一个数出现了b次,其他数都出现了a次,因此而且b<a,因此出现了b次的数字各个位上的数字要么与其他数有重合,会出现a*K+b次,b<a,要么不重合,出现b次,因此无论有没有重合,对a取余的结果都为b,,根据这一点,将这个数字的各个位上的数字求得组成即可,源代码如下
<pre name="code" class="cpp">#include<stdio.h>int main(){int n,a,b;scanf("%d%d%d\n",&n,&a,&b);//吃掉换行符int cnt[10][10]={0};int i,j;for(i=0;i<n;i++){char ch;j=0;while((ch=getchar())>47)cnt[j++][ch-48]++; //这条语句具有一定的技巧性,直接得到数字的统计数量 }//输入结束后,即可得到所有数字各个位上数字之和。for(i=0;i<10;i++)for(j=0;j<10;j++){if(cnt[i][j]%a==b)printf("%c",j+'0'); //这条语句的技巧在于可以直接得到重新组合的数字。 } printf("\n");}测试
输入:
10 4 2
55 67 55 67 67 76 76 67 76 76
输出:
55
0 0
- 位统计法的应用
- 的工作的统计法要哭了
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位运算的应用
- 位的巧妙应用
- 位运算的应用
- 位逻辑运算的巧妙应用
- 位运算符的应用
- 关于位运算的应用
- 五、struts2的OGNL的学习
- R语言 | 多元回归分析中的对照编码(contrast coding) | 第一节 dummy variable(哑变量) 和 dummy coding
- 【iOS开发】怎样让label变成圆角的
- 二叉树的非递归遍历
- hdu 1240 Asteroids!
- 位统计法的应用
- build_native.py文件分析(2)
- POJ 1005 I Think I Need a Houseboat (水题)
- 遗传算法与TSP问题的MATLAB实现
- 队列、堆、栈、堆栈的区别?
- 算法基础总结
- Find Peak Element - LeetCode
- sublime快捷键
- STL中的multiset