当前位置: 首页 > news >正文

百度站长工具官网店招免费设计在线生成

百度站长工具官网,店招免费设计在线生成,中国施工企业管理协会官网,如何申请cn域名做网站一、前言 还是偏基础的bfs#xff0c;但是有几个题不是很好写 二、题目总览 三、具体题目 3.1 问题 A: 数据结构-队列-奇怪的电梯 我的代码 可以看成求一维平面的bfs最短路 #include bits/stdc.h using i64 long long; using pii std::pairint,int; co…一、前言 还是偏基础的bfs但是有几个题不是很好写 二、题目总览 三、具体题目 3.1 问题 A: 数据结构-队列-奇怪的电梯 我的代码 可以看成求一维平面的bfs最短路 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e55,M 1e65,INF 0x3f3f3f3f; std::vectorint a(N,0); std::vectorbool vis(N,false);int n,st,ed;void bfs(){std::queuepii q;vis[st] true;pii p;p.first st,p.second 0;q.emplace(p);while(!q.empty()){auto t q.front();q.pop();if(t.firsted){std::cout t.second \n;return;}pii t1,t2;t1.first t.firsta[t.first];t1.second t.second1;if(t1.firstn!vis[t1.first]){vis[t1.first] true;q.emplace(t1);}t2.first t.first-a[t.first];t2.second t.second1;if(t2.first1!vis[t2.first]){vis[t2.first] true;q.emplace(t2);}}std::cout -1\n; }void solve(){std::cin n st ed;for(int i 1;in;i) std::cin a[i];bfs();} int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.2 问题 B: 连通块 我的代码 找全是1的联通块个数直接枚举每个点bfs当前未访问过的点即可 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e25,M 1e65,INF 0x3f3f3f3f; int n,m; int g[N][N]; bool vis[N][N]; int ans; using node std::arrayint,3; int dx[] {0,0,-1,1}; int dy[] {-1,1,0,0}; void bfs(int sx,int sy){std::queuenode q;node t;t[0] sx,t[1] sy,t[2] 0;q.emplace(t);vis[sx][sy] true;ans;while(!q.empty()){auto t q.front();q.pop();for(int i 0;i4;i){int u t[0]dx[i],v t[1]dy[i];if(u1||un||v1||vm||vis[u][v]||g[u][v]0) continue;node t1;vis[u][v] true;t1[0] u,t1[1] v,t1[2] t[2]1;q.emplace(t1);}} } void solve(){std::cin n m;for(int i 1;in;i){for(int j 1;jm;j){std::cin g[i][j];}}for(int i 1;in;i){for(int j 1;jm;j){if(!vis[i][j]g[i][j]1){bfs(i,j);}}}std::cout ans \n; } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.3 问题 C: 广搜——营救 我的代码 用char读图不能用int后续就是简单的求二维平面的bfs最短路 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e35,M 1e65,INF 0x3f3f3f3f; int n; char g[N][N]; bool vis[N][N]; int sx,sy,ex,ey; using node std::arrayint,3; int dx[] {0,0,-1,1}; int dy[] {-1,1,0,0};void bfs(){std::queuenode q;node tt;tt[0] sx,tt[1] sy,tt[2] 0;q.emplace(tt);vis[sx][sy] true;while(!q.empty()){auto t q.front();q.pop();if(t[0]ext[1]ey){std::cout t[2] \n;return;}for(int i 0;i4;i){int u t[0]dx[i],v t[1]dy[i];if(u1||un||v1||vn||vis[u][v]||g[u][v]1) continue;vis[u][v] true;node t1;t1[0] u,t1[1] v,t1[2] t[2]1;q.emplace(t1);}} } void solve(){std::cin n;for(int i 1;in;i){for(int j 1;jn;j){std::cin g[i][j];}}std::cin sx sy ex ey;bfs(); } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.4 问题 D: 迷宫的最短路径 我的代码 注意输出不要漏单词或者空格其他没啥好说的 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e35,M 1e65,INF 0x3f3f3f3f; int n,m; char g[N][N]; bool vis[N][N]; int sx,sy,ex,ey; int dx[] {0,0,-1,1}; int dy[] {-1,1,0,0}; using node std::arrayint,3;void bfs(){std::queuenode q;node tt;tt[0] sx,tt[1] sy,tt[2] 0;q.emplace(tt);vis[sx][sy] true;while(!q.empty()){auto t q.front();q.pop();if(t[0]ext[1]ey){std::cout The min steps are: t[2] !\n;return;}for(int i 0;i4;i){int u t[0]dx[i],v t[1]dy[i];if(u1||un||v1||vm||vis[u][v]||g[u][v]#) continue;vis[u][v] true;node t1;t1[0] u,t1[1] v,t1[2] t[2]1;q.emplace(t1);}}std::cout sorry!\n; }void solve(){std::cin n m;for(int i 1;in;i){for(int j 1;jm;j){std::cin g[i][j];if(g[i][j]S){sxi,syj;}else if(g[i][j]G){exi,eyj;}}}bfs(); } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.5 问题 E: 象棋中的马之进阶 我的代码 求八方向二维平面最短路的bfs #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e35,M 1e65,INF 0x3f3f3f3f; bool vis[N][N]; int sx,sy,ex,ey; int dx[] {-2,-1,1,2,2,1,-1,-2}; int dy[] {1,2,2,1,-1,-2,-2,-1}; using node std::arrayint,3;void bfs(){std::queuenode q;node tt;tt[0] sx,tt[1] sy,tt[2] 0;q.emplace(tt);vis[sx][sy] true;while(!q.empty()){auto t q.front();q.pop();if(t[0]ext[1]ey){std::cout t[2] \n;return;}for(int i 0;i8;i){int u t[0]dx[i],v t[1]dy[i];if(u1||u9||v1||v10||vis[u][v]) continue;vis[u][v] true;node t1;t1[0] u,t1[1] v,t1[2] t[2]1;q.emplace(t1);}}std::cout 0 \n; } void solve(){std::cin sx sy ex ey;bfs(); } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.6 问题 F: 搜索——我的世界 我的代码 求三维空间最短路的bfs #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e25,M 1e65,INF 0x3f3f3f3f;int k,n,m; char g[N][N][N]; bool vis[N][N][N]; int dx[] {0,0,-1,1,0,0}; int dy[] {-1,1,0,0,0,0}; int dz[] {0,0,0,0,1,-1}; using node std::arrayint,4; int sx,sy,sz,ex,ey,ez; void bfs(){std::queuenode q;node tt;tt[0] sz,tt[1] sx,tt[2] sy,tt[3] 0;q.emplace(tt);vis[sx][sy][sz] true;while(!q.empty()){auto t q.front();q.pop();if(t[0]ezt[1]ext[2]ey){std::cout t[3] \n;return;}for(int i 0;i6;i){int u t[0]dz[i],v t[1]dx[i],w t[2]dy[i];if(u1||uk||v1||vn||w1||wm||vis[u][v][w]||g[u][v][w]^) continue;vis[u][v][w] true;node t1;t1[0] u,t1[1] v,t1[2] w,t1[3] t[3]1;q.emplace(t1);}}std::cout 2333333 \n; } void solve(){std::cin k n m;for(int i 1;ik;i){for(int j 1;jn;j){for(int l 1;lm;l){std::cin g[i][j][l];if(g[i][j][l]S){sxj,syl,szi;}else if(g[i][j][l]E){exj,eyl,ezi;}}}}bfs(); } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.7 问题 G: 最小倍数 我的代码 不会爆long long思路见代码 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e55,M 1e65,INF 0x3f3f3f3f; i64 n;void bfs(){std::queuei64 q;q.emplace(1);while(!q.empty()){auto t q.front();q.pop();if(t%n0){std::cout t \n;return;}q.emplace(t*10);q.emplace(t*101);} } void solve(){while(std::cin n){if(n0) break;bfs();} } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.8 问题 H: 01组成的N的倍数 我的代码 会爆long long和unsigned long long而且用高精度也会超时时间复杂度卡得有点死只能用string #include bits/stdc.h using namespace std; using i64 long long; constexpr int N1e65; struct node{string str;i64 sum; } now,temp; queuenode q; int vis[N]; int n; void bfs(){queuenode q;memset(vis,0,sizeof(vis));now.str1;now.sum1%n;vis[now.sum]1;q.push(now);while(!q.empty()){nowq.front();q.pop();if(now.sum0){cout now.str endl;break;}temp.strnow.str0;temp.sum(now.sum*10)%n;if(vis[temp.sum]0){vis[temp.sum]1;q.push(temp);}temp.strnow.str1;temp.sum(now.sum*101)%n;if(vis[temp.sum]0){vis[temp.sum]1;q.push(temp);}} } int main(){while(~scanf(%d,n)){bfs();}return 0; } 3.9 问题 I: 新迷宫探险 我的代码 注意多组数据写法跟前面的求二维平面最短路的bfs一样 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e25,M 1e65,INF 0x3f3f3f3f; int n; char g[N][N]; bool vis[N][N]; int sx,sy,ex,ey; int dx[] {0,0,-1,1}; int dy[] {-1,1,0,0}; using node std::arrayint,3; void bfs(){std::queuenode q;node tt;tt[0] sx,tt[1] sy,tt[2] 0;vis[sx][sy] true;q.emplace(tt);while(!q.empty()){auto t q.front();q.pop();if(t[0]ext[1]ey){std::cout t[2] \n;return;}for(int i 0;i4;i){int u t[0]dx[i],v t[1]dy[i];if(u1||un||v1||vn||vis[u][v]||g[u][v]#) continue;vis[u][v] true;node t1;t1[0] u,t1[1] v,t1[2] t[2]1;q.emplace(t1);}}std::cout -1 \n; } void solve(){while(std::cin n){for(int i 1;in;i){for(int j 1;jn;j){std::cin g[i][j];}}memset(vis,false,sizeof vis);sx 1,sy 1,ex n,ey n;bfs();} } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.10 问题 J: 山峰和山谷 我的代码 枚举每个没有访问过的点bfs看是否能够形成山峰或者山谷 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 1e35,M 1e65,INF 0x3f3f3f3f; int n; int g[N][N]; bool vis[N][N]; int ans1,ans2; int dx[] {0,0,-1,1,-1,1,1,-1}; int dy[] {-1,1,0,0,1,1,-1,-1};using node std::arrayint,2;void bfs(int i,int j){std::queuenode q;node tt;tt[0] i,tt[1] j;q.emplace(tt);vis[i][j] true;bool flag1 false,flag2 false;int cnt 1;while(!q.empty()){auto t q.front();q.pop();for(int i 0;i8;i){int u t[0]dx[i],v t[1]dy[i];if(u1||un||v1||vn||(vis[u][v]g[u][v]g[t[0]][t[1]])) continue;if(g[u][v]g[t[0]][t[1]]) flag1true;else if(g[u][v]g[t[0]][t[1]]) flag2true;else{cnt;vis[u][v] true;node t1;t1[0] u,t1[1] v;q.emplace(t1);}}}if(flag1flag2) return;if(flag1) ans1;else if(flag2) ans2;if(cntn*n) ans1,ans2; } void solve(){std::cin n;for(int i 1;in;i){for(int j 1;jn;j){std::cin g[i][j];}}for(int i 1;in;i){for(int j 1;jn;j){if(!vis[i][j]){bfs(i,j);}}}std::cout ans1 ans2 \n; } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.11 问题 K: 兔兔之漂亮图 我的代码 这题看代码吧暂时不知道要怎么说清楚这个思路 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 3e55,M 1e65,INF 0x3f3f3f3f; constexpr int P 998244353;i64 power(i64 a, i64 b) {i64 res 1;for (; b; b / 2, a a*a%P) {if (b % 2) {res res*a%P;}}return res; }std::vectorstd::vectorint edges(N,std::vectorint()); std::vectorint a(N,0); int n,m; i64 ans; std::queueint q; i64 t 2;void bfs(){for(int i 1;in;i){if(a[i]!0) continue;a[i] 1;i64 cnt1 1,cnt2 0;q.emplace(i);while(!q.empty()){auto u q.front();q.pop();for(auto v:edges[u]){if(a[v]0){a[v] 3-a[u];if(a[v]1) cnt11;else cnt21;q.emplace(v);}else if(a[u]a[v]!3){ans 0;break;}}}if(ans0) break;//power(2,cnt)ansans*((power(t,cnt1)%Ppower(t,cnt2)%P)%P)%P;}} void solve(){std::cin n m;for(int i 1;in;i){edges[i].clear();a[i] 0;}ans 1;while(m--){int u,v;std::cin u v;edges[u].emplace_back(v);edges[v].emplace_back(u);}bfs();std::cout ans \n; } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.12 问题 L: 兔兔的导航系统 我的代码 原题 2024算法基础公选课练习三DFS1的L题 #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 2e55,M 1e65,INF 0x3f3f3f3f;int n,m,k; std::vectorstd::vectorint edges(N,std::vectorint()); std::vectorstd::vectorint reverse_edges(N,std::vectorint()); std::vectorbool vis(N,false); std::vectorint dist(N,INF); std::vectorint p(N,0); int st,ed; int maxn0,minn0; void bfs() {std::queueint q;vis[st] true;dist[st] 0;q.emplace(st);while(!q.empty()) {auto t q.front();q.pop();for(int i 0;ireverse_edges[t].size();i) {int to reverse_edges[t][i];if(vis[to]) continue;vis[to] true;dist[to] dist[t]1;q.emplace(to);}} }void solve(){std::cin n m;while(m--){int u,v;std::cin u v;edges[u].emplace_back(v);reverse_edges[v].emplace_back(u);}std::cin k;for(int i 1;ik;i) std::cin p[i];st p[1],ed p[k];bfs();for(int i 1;ik-1;i) {int u p[i],v p[i1];bool flag false;//用于判断是否当前u-v是最短路for(int j 0;jedges[u].size();j) {int w edges[u][j];if(dist[w]dist[u]-1) {if(vw) {flag true;}else {maxn;}}}if(!flag) minn,maxn;}std::cout minn maxn \n; } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;// std::cin t;for(int ti 0;tit;ti) {solve();}return 0; } 3.13 问题 M: 龙哥的换根树 我的代码 bfs两次然后换根dp #include bits/stdc.h using i64 long long; using pii std::pairint,int; constexpr int N 2e55,M 1e65,INF 0x3f3f3f3f; i64 n,k,c; void bfs(int root,std::vectorstd::vectorint edges,std::vectorbool vis,std::vectori64 dist){std::queueint q;vis[root] true;q.emplace(root);dist[root] 0;while(!q.empty()){auto u q.front();q.pop();for(auto v:edges[u]){if(vis[v]) continue;vis[v] true;dist[v] dist[u]1;q.emplace(v);}} } void solve(){std::cin n k c;std::vectorstd::vectorint edges(n5,std::vectorint());std::vectorbool vis(n5,false);std::vectori64 dist(n5,INF);//vector建边for(int i 1;in-1;i){int u,v;std::cin u v;edges[u].emplace_back(v);edges[v].emplace_back(u);}i64 ans0,max0,tmp0,leaf1;bfs(1,edges,vis,dist);//拷贝dist数组留用std::vectori64 prev_dist(n5);std::copy(dist.begin(),dist.end(),prev_dist.begin());//找到最远的叶子结点leaf和这个最远距离maxfor(int i 1;in;i){if(dist[i]max){max dist[i];leaf i;}}//初始化for(int i 1;in;i){vis[i] false;dist[i] INF;}//以这个叶子结点为根进行bfsbfs(leaf,edges,vis,dist);//枚举换根到每个点最大价值for(int i 1;in;i){ans std::max(ans,dist[i]*k-prev_dist[i]*c);}std::cout ans \n; } int main(){std::cin.tie(nullptr)-sync_with_stdio(false);int t 1;std::cin t;for(int ti 0;tit;ti) {solve();}return 0; }
http://www.zqtcl.cn/news/82566/

相关文章:

  • 品牌策划 网站源码中宁网站建设公司
  • 南京市溧水建设局网站济南网站建设小程序开发
  • 国内设计大神网站建网站的经历
  • 石家庄小学网站建设山东舜玉建设工程有限公司网站
  • 如何写网站开发需求文档企业网站seo外包
  • 做色流网站要注意什么问题wordpress瓶颈
  • 网站页面多大合适网站建设的书 推荐
  • 网站程序是什么电子商务网站建设与管理读书心得
  • 陕西省建设注册中心网站wordpress get_category
  • 企业网站源码变现方法网站排名下降的原因
  • 怎么做有邀请码的网站关于建设网站的情况说明
  • 韩国网站免费观看常州网站建设推广平台
  • 网站搭建者wordpress无法开启多站点
  • wordpress建站的利弊wordpress get attachment
  • 太原网站开发模板无锡开发公司
  • 济南网站建设与维护网络建设方案模板
  • 无锡做网站优化价格saas建站没有网站源代码么
  • 制作个人网站步骤广东省公共资源交易中心平台
  • 如何能去医疗网站做编辑手机网站建设视频
  • 顺德电子画册网站建设wordpress 路径文件
  • 网站推广系统方案戴南网站建设
  • 手机wap网站定位手表到哪个网站买
  • 建站推广网站做网站前怎么写文档
  • wordpress问候插件做优化网站能以量取胜么
  • 我要发布文章到网站上推广 哪些网站最好个人建站步骤
  • 网站宣传的优点我想做个网站推广怎么做
  • 自建博客网站旅游网站建设答辩ppt
  • 网站开发技术难点博文阅读网站建设
  • 网站不足之处石家庄北国商城
  • 南昌优化网站分析代做ppt