2019 蓝桥杯省赛 A 组模拟赛(一)-修建公路
题目:
蒜头国有 nn 座城市,编号分别为 0,1,2,3,...,n-1。编号为 x 和 y 的两座城市之间如果要修高速公路,必须花费 x|y 个金币,其中|
表示二进制按位或。
吝啬的国王想要花最少的价格修建高速公路,使得所有城市可以通过若干条高速公路互相达到。现在请你求出 n=2019 时,一共有多少不同的方案,能让所有城市连通并且造价最低。方案数可能很大,你只需输出对 10^9+7取模的结果。
样例输入
无
样例输出
无
思路:
这一题的主要考点是位运算和最小生成树。
分析:
根据题意我们可以知道这颗树的边权值是x|y,而目的是生成一个最小树。所以我们要选择边权值最小的,在什么情况下x|y最小的呢? x|y >= x 当且仅当 在二进制下,x的为0的位置,对应y必须为0,x为1的位置,对应y可以为0也可以为1。
解决完边权值的问题,下面就是如何生成一个最小树?
我们先思考一般情况:此时,我们已经构造出一个树,我们需要向其中加入一个结点,我们如何选择?当然是选择和要加入结点边权值最小的结点相连。而在这一题中,根据上文的论述,我们只需要统计当前结点i在二进制下有多少1(假设有n个1),因为1的位置我们可以变化,而0的位置 我们不可以变。所以一共有2^n - 1 个可能的选择。之后我们在用这个树之前的可能构造数乘(2^n - 1 )就是一般情况下的解决。
之后我们考虑起点的情况:我们发现编号0与任何一个数进行or运算都是0,所以0可以和任何一个结点相连都是最小的。那么,我们就可以选择0作为我们起点。
转载自:https://blog.csdn.net/caipengbenren/article/details/87118136
拓展:在c语言中1<<i与i<<1的区别是什么
1<<i是把1左移i位,每次左移以为就是乘以2,所以1<<i的结果是1乘以2的i次方
i<<1就是把i左移一位,即i乘以2,假如i=5,最后结果就是5*2=10
至于为什么左移一位是乘以2,这是运算器内部机理,说起来就更多了,计算机做乘法运算的时候不是一个个的相加,而是用移位来实现的。>>这个符号是右移,与左移相反,右移是除以2.
这里还有一点容易搞错的,就是移位符号的左边是需要计算的数,右边是需要移动的位数。
代码:
- #include<iostream>
- using namespace std;
- const int mod = 1e9 + ;
- int main(){
- int n = ;
- long long ans = ;
- for(int i = ; i < n; i++){
- int cnt = ;
- for(int j = ; i >> j > ; j++){
- if(i >> j & )//如果数i右移j位为1,即统计二进制状态下的i中有多少个1
- cnt ++;
- }
- ans = ans * (( << cnt) - ) % mod;//(1<<cnt)表示1*2^cnt
- }
- cout<<ans % mod;
- }
2019 蓝桥杯省赛 A 组模拟赛(一)-修建公路的更多相关文章
- 52-2018 蓝桥杯省赛 B 组模拟赛(一)java
最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 313133131 ...
- 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告
2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...
- 记 2019蓝桥杯校内预选赛(JAVA组) 赛后总结
引言 好像博客好久没更新了 哈哈哈哈哈 趁现在有空更新一波 不知道还有没有人看 确实该记录一下每天做了什么了 不然感觉有些浑浑噩噩了 比赛介绍 全称: 蓝桥杯全国软件和信息技术专业人才大赛 蓝桥杯 实 ...
- 2015年第六届蓝桥杯C/C++B组省赛题目解析
一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...
- 2019 蓝桥杯省赛 A 组模拟赛(一)-忽明忽暗
走廊里有 nn 盏灯,编号依次为 1,2,3,...,n,由学校电路控制中心管理.初始时,所有灯都是关闭的.某黑客入侵了学校电路控制中心,黑客想让灯忽明忽暗,进行了 n 轮操作.第 i 轮操作,会让所 ...
- 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(三)一笔画
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...
- 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(三)数字拆分
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...
- 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(一)
D题:马的管辖 二进制枚举方案.判断该方案是否全部能被覆盖,将最优方案存下来并进行剪枝. #include<iostream> #include<cstring> #inclu ...
- 蒜厂年会|计蒜客2019蓝桥杯省赛 B 组模拟赛(一)
样例输入: 3 1 -2 1 样例输出: 2 方法一: 将环形数组拆分成为普通数组,(通过搬运复制数据到尾部),再求前缀和,找出最大前缀和.因为枚举了每一个起点,所以最大连续和也一定出现在前缀和中.. ...
随机推荐
- Java基础--常见计算机编码类型
计算机编码指电脑内部代表字母或数字的方式,常见的编码方式有:ASCII编码,GB2312编码(简体中文),GBK,BIG5编码(繁体中文),ANSI编码,Unicode,UTF-8编码等. 1.ASC ...
- python之路(10)类的内置函数
目录 isinstance()和issubclass() __setitem__.__getitem__和__delitem__ __str__和__reper__ __format__ __slot ...
- [转载]Yacc 与 Lex 快速入门
https://www.ibm.com/developerworks/cn/linux/sdk/lex/index.html
- springboot-文件上传xls及POI操作Excel
1.pom导入依赖文件 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o ...
- word20170104办签证 Visa application有用的词和句子
有用的词:visa category: 签证类型tourist visa: 旅游签证visa interview: 签证面试multiple entries: 多次往返visa on arrival: ...
- 利用YOLOV3训练自己的数据
写在前面:YOLOV3只有修改了源码才需要重新make,而且make之前要先make clean. 一.准备数据 在/darknet/VOCdevkit1下建立文件夹VOC2007. voc2007文 ...
- git知识总结-1.git基础之git reference
1.前言 Git版本管理的内容,是一系列由40bytes SHA-1字符串所代表patch,而Git References,则是对这些字符串的引用(也可以理解为别名).为什么需要别名呢?因为这些字符串 ...
- springboot启动流程
@EnableDiscoveryClient @SpringBootApplication public class ProducerApplication { public static void ...
- yii2修改默认控制器
---------------------------------- 默认的控制器为site,修改文件 vendor\yiisoft\yii2\web\Application.php public $ ...
- mybatis:SQL拦截器
打印执行的SQL语句 import java.sql.Connection; import java.text.DateFormat; import java.util.Date; import ja ...