【牛客 - 331D】炫酷路途(二进制枚举 或 建图方式+最短路 或 dfs)

题干:
 

小希现在要从寝室赶到机房,路途可以按距离分为N段,第i个和i+1个是直接相连的,只需要一秒钟就可以相互到达。

炫酷的是,从第i个到第i+2pi+2p个也是直接相连的(其中p为任意非负整数),只需要一秒钟就可以相互到达。

更炫酷的是,有K个传送法阵使得某些u,v之间也是直接相连的,只需要一秒钟就可以相互到达,当然,由于设备故障,可能会有一些u=v的情况发生。

现在小希为了赶路,她需要在最短的时间里从寝室(编号为1)到达机房(编号为N),她不希望到达这N个部分以外的地方(不能到达位置N+1),也不能走到比自己当前位置编号小的地方(比如从5走到3是非法的)。

她想知道最短的时间是多少。

输入描述:

第一行输入两个整数N,K,表示路途的段数和传送法阵的数量。从第二行开始K行,每行两个整数aiai,bibi表示两个位置之间相连。
2≤N≤1,000,000,0002≤N≤1,000,000,0000≤K≤150≤K≤15

输出描述:

输出一个整数,表示从寝室到机房最短的时间是多少秒。

示例1

输入

复制

12 2
1 5
6 6

输出

复制

3

示例2

输入

复制

17 2
2 5
8 9

输出

复制

1

 

解题报告:

    两种方法差不多快,,因为数据比较小,,最多也就30步左右、、所以怎么写都行

AC代码1:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
struct Node {ll u,v;
} node[55],use[55];
ll db[55],qi[55];
const ll mod = 1e9+7;
ll qpow(ll a, ll k) {ll res = 1;while(k) {if(k&1) res = (a*res)%mod;k>>=1;a = (a*a)%mod;}return res;
}
bool cmp(Node a,Node b) {if(a.u != b.u) return a.u < b.u;else return a.v < b.v;
}
ll go(ll cur,ll tar) {ll res = 0;tar = tar - cur;cur = 0;for(int i = 33; i>=0 && cur != tar; i--) {if(cur + db[i] <= tar) res++,cur += db[i];}return res;
}
int main()
{db[0] = 1;//printf("%d",1<<1);for(ll i = 1; i<=40; i++) db[i] = db[i-1]*2;ll n,k;cin>>n>>k;for(int i = 0; i<k; i++) {scanf("%lld %lld",&node[i].u,&node[i].v);if(node[i].u == node[i].v || node[i].u > n || node[i].v > n) {k--,i--;continue;}if(node[i].u > node[i].v) swap(node[i].u,node[i].v);}sort(node,node+k,cmp);ll up = qpow(2,k),ans = 0x3f3f3f3f;for(ll bit = 0; bit<up; bit++) {int tot = 0;for(int i = 0; i<k; i++) {if( ( (1<<i) & bit ) != 0) use[++tot] = node[i],qi[tot] = node[i].u;}ll now = 1,step = 0;while(now <= n) {if(now == n) break;if(now > qi[tot]) {step += go(now,n);break;}int pos = lower_bound(qi+1,qi+tot+1,now) - qi;if(qi[pos] == now) step++,now = use[pos].v;else step += go(now,qi[pos]),now = qi[pos];}ans = min(step,ans);}printf("%lld\n",ans);return 0 ;}
/*
14 2
1 14
1 13
2
*/

注意这种方式第一次被坑了,,if( ( (1<<i) & bit ) != 0)这一句 刚开始写的是==1  这样就错了,,因为你&运算时,非零不代表是1、、之前也在这错过、、这次一定要记住了,就写if((1<<i) & bit ) 多好、、

不过人家写的好短、、、应该是我多考虑了很多情况、(然而这个代码忘了读入的时候判断u和v的大小)

#include<bits/stdc++.h>
using namespace std;
struct Node {int u, v;bool operator < (const Node& node) const {return u <= node.u;}
} node[20];
int step(int d) {int ans = 0;while(d) {d -= d & -d;ans++;}return ans;
}
int main() {int n, k; scanf("%d%d", &n, &k);for(int i = 0; i < k; i++) scanf("%d%d", &node[i].u, &node[i].v);sort(node, node+k);int ans = step(n-1);for(int i = 0; i < 1<<k; i++) {int x = 1, tmp = 0;for(int j = 0; j < k; j++) {if(i & 1<<j) {if(x > node[j].u) continue;tmp += step(node[j].u-x) + 1;x = node[j].v;}}if(x > n) continue;tmp += step(n-x);ans = min(ans, tmp);}printf("%d\n", ans);return 0;
}

AC代码2:(建图最短路)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
const int INF = 0x3f3f3f3f;
int a[MAX];
int dis[MAX];
int tot;
struct Node {ll u,v;
} node[MAX];
int main()
{int n,k;int tmp1,tmp2;cin>>n>>k;for(int i =1; i<=k; i++) {scanf("%d %d",&tmp1,&tmp2);if(tmp1 == tmp2 || tmp1 > n || tmp2 > n) {k--,i--;continue;}node[i].u = tmp1,node[i].v = tmp2;if(node[i].u > node[i].v) swap(node[i].u,node[i].v);a[++tot] = tmp1,a[++tot] = tmp2;}a[++tot] = 1;a[++tot] = n;sort(a+1,a+tot+1);int x = unique(a+1,a+tot+1) - a - 1;memset(dis,INF,sizeof dis); //求出1到另外一点的最短路 dis[1] = 0;for(int i = 1; i<=x; i++) {for(int j = i+1; j<=x; j++) {for(int q = 1; q<=k; q++) {if(a[i] == node[q].u && a[j] == node[q].v) dis[j] = min(dis[i]+1,dis[j]);}    dis[j] = min(dis[i] + __builtin_popcount(a[j] - a[i]),dis[j]);}}printf("%d\n", dis[x]);return 0 ;}

AC代码3:(dfs这题也很快)

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define mod 998244353
#define MAXN 1000005
const int INF = 0x3f3f3f3f;
int n,k;
struct no{int s,e;
}path[16];int go(int x){int r=0;while(x){if(x%2==1) r++;x=x/2;}return r;
}
int dfs(int pos,int L,int R){if(pos==k+1) return go(R-L);int ll=path[pos].s,rr=path[pos].e;int s1=dfs(pos+1,L,R),s2 = INF;if(ll>=L&&rr<=R){s2=dfs(pos+1,L,ll)+dfs(pos+1,rr,R)+1;}return min(s1,s2);
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=k;i++){scanf("%d%d",&path[i].s,&path[i].e);if(path[i].s > path[i].e) swap(path[i].s,path[i].e);}cout<<dfs(1,1,n);return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 子查询 as_mysql子查询

更多关于LeetCode习题总结请翻阅我的博客&#xff1a;LeetCode - mysql子查询【184. 部门工资最高的员工】子查询一、按查询结果分类&#xff1a;1.作为数据源使用&#xff1b;2.作为选择条件使用&#xff1b;二、按常见的子查询分类&#xff1a;1.由比较运算符引发的子查询&am…

【牛客 - 331G】炫酷数字(反素数打表 或 扩展埃式筛法,结论)

题干&#xff1a; 小希希望你构造一个最小的正整数&#xff0c;使得其有n个因子。 输入描述: 第一行一个整数T表示数据组数每组数据第一行输入一个正整数n&#xff0c;表示其因子数。n≤1,000,000n≤1,000,000T≤1,000,000T≤1,000,000输出描述: 输出一行一个整数&#xff…

【牛客 - 331J】炫酷数学(打表猜结论,按位枚举证明)

题干&#xff1a; 小希最近想知道一个东西&#xff0c;就是ABA|B(其中|为按位或)的二元组有多少个。 当然&#xff0c;直接做这个式子对小希来说太难了&#xff0c;所以小希改变了一些条件&#xff0c;她仅想知道其中A,B<NA,B<N的情况&#xff0c;其中N为2的幂次。 当然…

workerman mysql_workerman/mysql

Workerman/MySQL说明常驻内存的程序在使用mysql时经常会遇到mysql gone away的错误&#xff0c;这个是由于程序与mysql的连接长时间没有通讯&#xff0c;连接被mysql服务端踢掉导致。本数据库类可以解决这个问题&#xff0c;当发生mysql gone away错误时&#xff0c;会自动重试…

【LeetCode - 279】完全平方数(四平方和定理,数论,图论,dp)

题干&#xff1a; 给定正整数 n&#xff0c;找到若干个完全平方数&#xff08;比如 1, 4, 9, 16, ...&#xff09;使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例 2: 输入: n 13 输出: 2 解释: 13 …

C++中string类的length()与size()方法和C语言的strlen()函数有什么区别?

直接上代码段&#xff1a; char buf[256]{0}; buf[0]a; buf[2]v; buf[3]h;string strTest(buf,6); cout<<"strTest[0]:"<<(uint32_t)strTest[0]<<"_"<<(uint32_t)strTest[1]<<"_"<<(uint32_t)strTest[2]&l…

nutch mysql solr_Nutch2.1+mysql+solr3.6.1+中文网站抓取

1、mysql 数据库配置 linux mysql安装步骤省略。 创建数据库与表 [sql] view plaincopyprint? CREATE DATABASE nutch DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE TABLE webpage( id varchar (767) CHARACTER SET latin1 NOT N1、mysql 数据库配置l…

【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)

题干&#xff1a; 如果一个数大于等于 10且任意连续两位都是质数&#xff0c;那么就称之为 Wish 数。当然&#xff0c;第一个 Wish 数是 11。 比如 97&#xff0c;111&#xff0c;131&#xff0c;119 都是 Wish 数&#xff0c;而 12&#xff0c;136 则不是。 问第 N 个 Wish…

mysql8 授权远程登录_MySQL8 远程授权访问

在测试环境&#xff0c;想实现MySQL 8 数据库的远程访问授权。传统的方法已经不行&#xff0c;报1064错误GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 123456 WITH GRANT OPTION;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that co…

【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)

题干&#xff1a; 蒜头去嘉年华玩儿套圈圈&#xff0c;是这么玩儿的。有一些瓶口口径不同的啤酒瓶&#xff0c;瓶子里面有一些奖品。如果蒜头用手上的圈圈套中了啤酒瓶&#xff0c;那么奖品就归他了。 假设蒜头君无限精准&#xff0c;指哪儿打哪儿&#xff0c;并且蒜头了解到…

centos web 访问mysql_Centos7安装Web服务器--Mysql5.7.12安装

我是勤劳的搬运工……源码装了好多次Mysql&#xff0c;终于成功了……因为安装mysql需要对应的boost文件(必须是相应版本&#xff0c;不能高也不能低)&#xff0c;所以&#xff0c;为了不再麻烦的搜索对应的boost文件&#xff0c;下载包含boost的Mysql包2.查看是否有编译器# gc…

【计蒜客 - 蓝桥训练】轻重搭配(贪心,STLset 或 二分)

题干&#xff1a; n 个同学去动物园参观&#xff0c;原本每人都需要买一张门票&#xff0c;但售票处推出了一个优惠活动&#xff0c;一个体重为 xx 的人可以和体重至少为 2x2x 配对&#xff0c;这样两人只需买一张票。现在给出了 nn 个人的体重&#xff0c;请你计算他们最少需…

phpstudy mysql5.1_linux下mysql5.1 和 5.7安装教程详解

本文主要和大家分享linux下mysql 5.1 和 5.7的安装教程&#xff0c;希望能帮助到大家。以下内容的操作系统为&#xff1a;centos 6.7yum安装mysql 5.1.73卸载系统自带的mysql执行以下命令查看是否有自带mysql:rpm -qa | grep mysql如果发现有输出结果,那么执行以下命令依次删除…

【牛客 - 368C】流星雨(概率dp,乘法逆元)

题干&#xff1a; 现在一共有n天&#xff0c;第i天如果有流星雨的话&#xff0c;会有wiwi颗流星雨。 第i天有流星雨的概率是pipi。 如果第一天有流星雨了&#xff0c;那么第二天有流星雨的可能性是p2Pp2P&#xff0c;否则是p2p2。相应的&#xff0c;如果第i−1 (i≥2)i−1 (…

mysql workbench 无法编辑_MySQL Workbench编辑表数据是只读的

14 个答案:答案 0 :(得分&#xff1a;60)我假设桌子有一把主键。首先尝试运行unlock tables命令以查看是否修复了它。如果所有其他方法都失败了&#xff0c;您可以更改表以创建具有自动增量的新主键列&#xff0c;并希望能够修复它。一旦完成&#xff0c;您应该能够毫无问题地删…

【计蒜客 - 蓝桥训练】炮台实验(数学期望,期望dp)

题干&#xff1a; 蒜头君在玩一个战争模拟游戏&#xff0c;他有高度为 1,2,3,\ldots ,n1,2,3,…,n 的炮台各一个&#xff0c;他需要把这 nn 个炮台从左往右排成一行&#xff0c;并且炮口都朝向右边。 在这个游戏中&#xff0c;所有炮台发射的炮弹会摧毁前方所有高度比自己低的…

mysql本身主从_Mysql主从复制

Mysql环境准备#下载Mysqlwget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm如果报错: -bash: wget: 未找到命令安装插件 yum -y install wget安装mysql-community-release-el7-5.noarch.rpmsudo rpm -ivh mysql-community-release-el7-5.noarch.rpm安装Mys…

【蓝桥杯官网试题 - 算法提高 】P0404(模拟)

题干&#xff1a; 计算一个无符号整数的阿尔法乘积。对于一个无符号整数x来说&#xff0c;它的阿尔法乘积是这样来计算的&#xff1a;如果x是一个个位数&#xff0c;那么它的阿尔法乘积就是它本身&#xff1b;否则的话&#xff0c;x的阿尔法乘积就等于它的各位非0的数字相乘所…

phison主控ps3111量产工具_从固态硬盘拆解看门道 深入解读闪存编号和主控容量...

一篇固态硬盘的评测是否有水平&#xff0c;不光是看测试跑分是否详细&#xff0c;更应有针对成绩的解读以及硬件拆解和结构上的分析。毕竟跑分大家都会跑&#xff0c;必须拿出其他人不知道的内存才能真正吸引读者。因为大多数固态硬盘拆解会失去保修&#xff0c;所以拆解是网友…

*【计蒜客 - 蓝桥训练】人以群分(二分 + dp)

题干&#xff1a; 某班有 nn 个同学&#xff0c;每个同学有一个外向程度 a_iai​。由于要进行某个活动&#xff0c;需要把他们分成若干个小组&#xff0c;每个小组的人数至少为 mm 人。不同外向程度的人在一个小组会产生不开心值&#xff0c;定义一个小组的不开心值为组内成员…