ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022/2/1模拟、枚举和贪心自学

2022-02-01 22:31:58  阅读:169  来源: 互联网

标签:同学 学号 右数 按法 异或 取反 枚举 2022 贪心


听课部分:(9:00~15:00)

例17:Flip Game
先考虑结论:若按一个按钮两次则无意义
思路:枚举第一行的按法,共2^4种按法并往下推由于下一行只能去影响上一行所以下一行的按法唯一。
如何存放?用int就可以存放所谓的二进制数字串
位运算
<<左移,>>右移,|或,&与,~取反,^异或
在例17中,利用左移,右移和异或即可完成开关的操作
要注意的是,比较运算符的优先级高于位运算符,所以两者同时出现时必须要打括号。

加强版

有N*M个灯泡(N<=10,M<=100)

思路:枚举N,所以总复杂度为M*(2^N)

位运算基础练习

1.去掉最后一位:x>>1

2.在最后加一个0:x<<1

3.在最后加一个1:(x<<1)+1     (x<<1|1)

4.把最后一位变成1:x|1

5.把最后一位变成0:(x|1)-1     (x>>1)<<1

6.最后一位取反:x^1

7.把右数第k位变成1:x|(1<<(k-1))

8.把右数第k位变成0:(x|(1<<(k-1)))^(1<<(k-1))     x&(~(1<<(k-1)))

9.右数第k位取反:x^(1<<(k-1))

例19:点名

已知n个同学的学号,现在有一场活动,来了n-1个同学,他们每个人都把自己的学号写了下来,告诉你这n-1个同学的学号,问哪个同学没来。

思路

n小,学号小:开数组用下标哈希

n小,学号比较大:sort两个数组,从左往右遍历,到第一个不一样的为止

n大,学号比较大:开longlong将所有同学的学号相加,减去n-1个同学的学号剩余的即是没来的

n大,学号非常大:开高精(?)呸呸呸。先开一个longlong,利用异或两个相同的数会还原的思想即可

如果有两个同学没来怎么办?

先开longlong,求出总异或和再还原为两个没来的同学的异或和,由于不存在两个学号相同的同学,必然不可能该异或和全为0;对于异或和为1的某一位,必然有两个同学该位不同(在2进制下),据此可以把所有同学分为两堆,分别是该位为0的和该位为1的。之后,两堆中每堆就只有一个没来的同学,就回归到了在一堆中求一个没来同学的问题了。

例18:NC110113 CF333E Summer Earings

N个点,任选其中三个作为圆心画三个半径相同的圆,圆不能相交,求能画圆的最大的半径为多少(N<=3000)

说实话挺难的,本新手基本听不懂

 

标签:同学,学号,右数,按法,异或,取反,枚举,2022,贪心
来源: https://www.cnblogs.com/DHUQSeveN/p/15859837.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有