主元素问题与摩尔投票法、格雷码
一堆小玩意,放到一起。
题意:给定一个n个元素数列,保证有一个数
数据范围 时限0.5s,空间2M。
也就是说你就只开几个变量就行了。(虽然考试的时候有人拿hash玄学乱搞过了)
首先这个时间卡掉了排序,空间和数据范围卡掉了桶的做法。我们考虑利用“数
我们发现(反正我没发现我太弱了55555)如果两两删去两个不同的元素,最后剩下的一定是元素
于是我们就得到了一种
- 如果
,则用 更新 ,将 设为 。 - 如果
,则将当前计数器 。(也就是用不同的元素互相消去) - 反之
。(也就是统计相同的元素个数)
依题意模拟即可。
scanf("%d",&n);
while(n--){
int x;scanf("%d",&x);
if(ans!=x){
if(--cnt<=0)ans=x,cnt=1;
}
else cnt++;
}
反正我觉得不会考,但是考了就考了吧。
格雷码是一个二进制数系,其中两个相邻数的二进制位只有一位不同。
给出手动构造方法:
- 翻转最低位得到下一个格雷码。
- 翻转最右边的1的左边一位得到下一个格雷码。
交替操作1,2共
注意我们说的格雷码下标是从0开始的,即
然后是计算法:第
int g(int n){
return n^(n>>1);
}
然后是它的逆变换。
int getn(int g){
int n=0;
for(;g;g>>=1)n^=g;
return n;
}
快踩
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】