今日总结2024/5/31

今日熟悉了常用库函数,并查集,常用建边方式

明天蓝桥杯国赛随缘了,第一次估计也是最后一次了

LQOJ.269 排列序数

如果用 a b c d 这 4 个字母组成一个串,有 4!=24 种,如果把它们排个序,每个串都对应一个序号:

abcd 0

abdc 1

acbd 2

acdb 3

adbc 4

adcb 5

bacd 6

⋯⋯

现在有不多于 10 个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?

next_permutation只能获得下一个排列,如果要获得全排列,那么就需要先对数组进行升序排序

调用next_permutation函数即可

#include <iostream>
using namespace std;
#include <algorithm>
int main()
{string s;cin>>s;string s2(s);sort(s2.begin(),s2.end());int idx=0;do{if(s2==s){cout<<idx;break;}idx++;}while(next_permutation(s2.begin(),s2.end()));return 0;
}

std::count函数,统计迭代器begin和end中 一个元素出现的次数

LQOJ 227. 交换次数

招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:BABTATT,这使得应聘者十分别扭。

于是,管理部门要求招聘方进行必要的交换位置,使得每个集团的席位都挨在一起。即最后形如:BBAAATTT 这样的形状,当然,也可能是:AAABBTTT 等。

现在,假设每次只能交换 2 个席位,并且知道现在的席位分布,你的任务是计算:要使每个集团的招聘席位都挨在一起需要至少进行多少次交换动作。

输入描述

输入是一行 n 个字符(只含有字母 B、A 或 T ),表示现在的席位分布。

输出描述

输出是一个整数,表示至少交换次数。

#include <bits/stdc++.h>
using namespace std;
int ans=0x3f3f3f3f;
string s;int solve(string c){//假设刚开始是ABT
int a1=count(s.begin(),s.end(),c[0]);
int a2=count(s.begin(),s.end(),c[2]);
int l1=count(s.begin(),s.begin()+a1,c[1]);//求出把A中的B交换的次数
int l2=count(s.begin(),s.begin()+a1,c[2]);//求出把A中T交换的次数
int l3=count(s.end()-a2,s.end(),c[0]);
int l4=count(s.end()-a2,s.end(),c[1]);
return l1+l2+l3+l4-min(l2,l3);//减去重复计算的
}int main(){cin>>s;string s1="ABT";do{ans=min(ans,solve(s1));//全部情况取最小值}while(next_permutation(s1.begin(),s1.end()));cout<<ans;return 0;
}

暴力枚举所有情况选最小即可

[ABC079D] Wall

你面前有一堵墙,墙上有数字,你需要将墙上的数字都变成 1 。
现在给出一个 W×H 的矩阵 A 表示墙上数字的情况。
其中若 Ai,j​=−1 ,则表示位置 (i,j) 上没有数字,否则 Ai,j​ 的值表示墙上(i,j) 位置的数字。
当然,你还有一张 10×10 的表 C,其中 Ci,j​ 表示把数字 i 转化成数字 j 所需要的花费。
求花费的最小值。

通过费用表可以建立每个数字进行相互转化的带权边,且每个数字可以通过间接转化来达到最小花费,因此可以使用floyd

然后遍历墙上每一个数累加最小花费即可

#include <bits/stdc++.h>
using namespace std;
int h,w;
const int N=11,M=210;
int c[N][N],g[M][M];void floyd(){for(int k=0;k<=9;k++)for(int i=0;i<=9;i++)for(int j=0;j<=9;j++){c[i][j]=min(c[i][j],c[i][k]+c[k][j]);}
}int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>h>>w;for(int i=0;i<=9;i++)for(int j=0;j<=9;j++)cin>>c[i][j];floyd();//把转换费用当作带权边int ans=0;for(int i=1;i<=h;i++)for(int j=1;j<=w;j++){cin>>g[i][j];if(g[i][j]==-1||g[i][j]==1) continue;ans+=c[g[i][j]][1];}cout<<ans;return 0;
}
P1196 [NOI2002] 银河英雄传说

合并指令为 M i j,含义为第 i 号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第 j 号战舰所在的战舰队列的尾部。显然战舰队列是由处于同一列的一个或多个战舰组成的。合并指令的执行结果会使队列增大。

然而,老谋深算的莱因哈特早已在战略上取得了主动。在交战中,他可以通过庞大的情报网络随时监听杨威利的舰队调动指令。

在杨威利发布指令调动舰队的同时,莱因哈特为了及时了解当前杨威利的战舰分布情况,也会发出一些询问指令:C i j。该指令意思是,询问电脑,杨威利的第 i 号战舰与第 j 号战舰当前是否在同一列中,如果在同一列中,那么它们之间布置有多少战舰。

作为一个资深的高级程序设计员,你被要求编写程序分析杨威利的指令,以及回答莱因哈特的询问。

可以很容易想到用并查集来模拟合并操作,但是要多维护一个战舰之间的距离,因此使用带权并查集来进行合并

#include <bits/stdc++.h>
using namespace std;
const int N=3e4+5;
int d[N],size[N],p[N];int find(int u){if(p[u]!=u){int root=find(p[u]);d[u]+=d[p[u]];//递归加距离p[u]=root;}return p[u];
}int main(){int t;cin>>t;for(int i=0;i<=N-1;i++){size[i]=1;//初始化并查集p[i]=i;//距离刚开始都默认为0}while(t--){char op;int i,j;cin>>op>>i>>j;if(op=='M'){int pa=find(i),pb=find(j);d[pa]=size[pb];//被接入的根结点初始化距离为到b根的距离size[pb]+=size[pa];p[pa]=pb;}else{int pa=find(i),pb=find(j);if(pa!=pb) cout<<-1<<'\n';else cout<<max(0,abs(d[i]-d[j])-1)<<'\n';//记住是对于战舰i和战舰j之间的距离}}return 0;
}
P1656 炸铁路

A 国派出将军 uim,对 B 国进行战略性措施,以解救涂炭的生灵。

B 国有 n 个城市,这些城市以铁路相连。任意两个城市都可以通过铁路直接或者间接到达。

uim 发现有些铁路被毁坏之后,某两个城市无法互相通过铁路到达。这样的铁路就被称为 key road。

uim 为了尽快使该国的物流系统瘫痪,希望炸毁铁路,以达到存在某两个城市无法互相通过铁路到达的效果。

然而,只有一发炮弹(A 国国会不给钱了)。所以,他能轰炸哪一条铁路呢?

首先把每一条铁路存起来,然后考虑连通性,枚举每一根铁路然后根据次数除这条铁路外的这两点如果不联通,则说明这条路是这两点唯一的路,输出即可,然后必须对铁路进行排序再枚举,才能按字典序输出

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=160,M=5010;
PII t[M];
int n,m,cnt,p[N];int find(int u){if(p[u]!=u) p[u]=find(p[u]);return p[u];
}int main(){cin>>n>>m;for(int i=0;i<m;i++){int a,b;cin>>a>>b;if(a>b) swap(a,b);t[cnt++]={a,b};}sort(t,t+cnt);//因为枚举的边要从小到大for(int i=0;i<cnt;i++){for(int j=1;j<=n;j++) p[j]=j;//初始化for(int j=0;j<cnt;j++){if(i==j) continue;//当前处理这条不做处理int pa=find(t[j].x),pb=find(t[j].y);if(pa!=pb)p[pa]=pb;}//开始枚举每条边if(find(t[i].x)!=find(t[i].y)) cout<<t[i].x<<' '<<t[i].y<<'\n';}return 0;
}
P1396 营救

妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小明被带到了 t 区,而自己在 s 区。

该市有 m 条大道连接 n 个区,一条大道将两个区相连接,每个大道有一个拥挤度。小明的妈妈虽然很着急,但是不愿意拥挤的人潮冲乱了她优雅的步伐。所以请你帮她规划一条从 s 至 t 的路线,使得经过道路的拥挤度最大值最小。

使用并查集维护最小生成树,当s->t第一次联通时的最大拥挤度,就是答案

Kruskal最小生成树-重载函数,边排序,每次选最小的进行联通

#include <bits/stdc++.h>
using namespace std;
const int N=1e4+5,M=2e4+5;
int p[N],n,m,s,t;//n个区,m条边,s->tstruct edge{int u,v,w;bool operator<(edge &W){return w<W.w;//从小到大排}
}Edge[M];int find(int u){if(p[u]!=u) p[u]=find(p[u]);return p[u];
}int main(){cin>>n>>m>>s>>t;for(int i=0;i<m;i++){cin>>Edge[i].u>>Edge[i].v>>Edge[i].w;}sort(Edge,Edge+m);//按权值排序for(int i=1;i<=n;i++) p[i]=i;int res=0;for(int i=0;i<m;i++){int a=find(Edge[i].u),b=find(Edge[i].v),c=Edge[i].w;if(a!=b){p[a]=b;res=max(res,c);}if(find(s)==find(t)){cout<<res;break;}}return 0;
}

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

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

相关文章

陪玩小程序都需要怎么做?

开发陪玩小程序需要进行全面的需求分析、功能规划、技术选型、界面设计等一系列步骤。陪玩小程序作为一种新兴的网络服务平台&#xff0c;为用户提供了寻找游戏伙伴、预约陪玩服务等功能&#xff0c;满足了用户在游戏领域的社交互动和技能提升需求。具体分析如下&#xff1a; 需…

一份不知道哪里来的第十五届国赛模拟题

这是一个不知道来源的模拟题目&#xff0c;没有完全完成&#xff0c;只作代码记录&#xff0c;不作分析和展示&#xff0c;极其冗长&#xff0c;但里面有长按短按双击的复合&#xff0c;可以看看。 目录 题目代码底层驱动主程序核心代码关键&#xff1a;双击单击长按复合代码 …

Flutter 中的 SliverPadding 小部件:全面指南

Flutter 中的 SliverPadding 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言来构建高性能、美观的跨平台应用。在 Flutter 的滚动组件体系中&#xff0c;SliverPadding 是一个用来为其子 Slive…

今日学会的,刘姥姥进大观园

Git - First-Time Git Setup 下载了Git&#xff0c;会用Git了&#xff1f; 还有这个&#xff1a;学习 HTML5 Canvas 这一篇文章就够了 | 菜鸟教程 (runoob.com) JavaScript 用法 | 菜鸟教程 (runoob.com) 看到这个真的是受益匪浅&#xff0c;我终于懂了一直有的疑惑。 3D可…

js 正则匹配返回所有匹配到的范围

js正则默认不返回匹配到的范围&#xff0c;有些场景用起来就不太方便。如果想针对于匹配到的位置多次操作就要另外想个办法了。 indexOf 这个只能获取到第一个出现的位置&#xff0c;其他位置不太行&#xff0c;这个方法好像就行不通了。 自己一个个找&#xff0c;写个kmp算法感…

Mock的用法

1. 引入unittest包&#xff0c;再从包里引用mock类 import unittest from unittest import Mock 2. mock的作用&#xff0c;做挡板或者用来做一些单元测试过程中复杂的数据的模拟 demo Demo() #把mock的值赋值给demo的get()方法&#xff0c;这样在调用这个方法时&#xff0…

RAG技术探索

什么是RAG 1 RAG原理 RAG&#xff08;Retrieval Augmented Generation, 检索增强生成&#xff09;&#xff0c;即LLM在回答问题或生成文本时&#xff0c;先会从大量文档中检索出相关的信息&#xff0c;然后基于这些信息生成回答或文本&#xff0c;从而提高预测质量。RAG模型尤…

数据在内存中的存储<C语言>

导言 在计算机中不同类型的数据在计算机内部存储形式各不相同&#xff0c;弄懂各种数据在计算机内部存储形式是有必要的&#xff0c;C语言的学习不能浮于表面&#xff0c;更要锻炼我们的“内功”&#xff0c;将来在写程序的时候遇见各种稀奇古怪的bug时&#xff0c;也便能迎刃而…

天文学专业大学院校排名(2024最新排行榜)

序号 学校代码 学校名称 学科名称 评估结果 1 10284 南京大学 天文学 A 2 10358 中国科学技术大学 天文学 A 3 10001 北京大学 天文学 B- 4 10248 上海交通大学 天文学 C 5 10027 北京师范大学 天文学 C- 天文学专业排名前5名的大学有&#xff1…

pipeline在计算机领域有什么贴切的翻译

在计算机领域&#xff0c;"pipeline"一词通常被翻译为“流水线”。这个术语指的是一种技术或架构&#xff0c;其中多个处理阶段按顺序执行&#xff0c;使得数据可以在一个阶段完成处理后立即被送入下一个阶段&#xff0c;从而提高效率和性能。在不同的上下文中&#…

控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解&#xff08;附带案例实现&#xff09; 文章目录 控制障碍函数CBF详解&#xff08;附带案例实现&#xff09;1. Control Affine System2. Lyapunov Theory, Nagumos Theory, Invariance Principle3. Control Lyapunov Function (CLF) and CLF-QP4. Control …

算法(十二)分治算法

文章目录 算法概念算法例子字符串中小写转大写求X^n问题 算法概念 分治算法&#xff08;divide and conquer&#xff09;算法的核心思想其实就是"分而治之"&#xff0c;将原问题划分成n个规模较小&#xff0c;并且结构与原问题相似的子问题&#xff0c;递归地解决这…

移植其他命令行Vivado IDE的工具

移植其他命令行Vivado IDE的工具 介绍 本章介绍如何迁移各种AMD命令行工具以在AMD中使用 Vivado™集成设计环境&#xff08;IDE&#xff09;。 迁移ISE Partgen命令行工具 ISE™Design Suite Partgen工具可获得&#xff1a; •系统上安装的所有设备的信息 •详细的包装信息 您可…

[openwrt-21.02]openwrt-21.02 make menuconfig不显示luci-app-firewall问题分析及解决方案

问题描述 make menuconfig在 在applications界面没有luci-app-firewall 问题分析 首先重新执行 ./scripts/feeds update -a ./scripts/feeds install -a 然后再次执行make menuconfig&#xff0c;依然不显示&#xff0c;所以不是feeds安装的问题 最后看到log有个openmptc…

GB-T 43206-2023 信息安全技术 信息系统密码应用测评要求

GB-T 43206-2023 信息安全技术 信息系统密码应用测评要求 编写背景 随着信息技术的飞速发展&#xff0c;信息系统在社会经济活动中扮演着越来越重要的角色。信息安全问题也随之成为社会关注的焦点。GB-T 43206-2023《信息安全技术 信息系统密码应用测评要求》是针对信息系统中…

kotlin gradle 在libs.versions.toml控制下添加本地aar/jar的方法

与之前gradle集中控制的方法相同&#xff0c;唯一不同的是改成kotlin dsl格式&#xff1a; 修改Module级别的build.gradle.kt文件 在dependencies函数块内添加下面代码块 implementation(fileTree(mapOf("dir" to "libs","include" to listOf(…

记录mabatis-plus初体验

一、简介 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 测试问题现象&#xff1a;测试mabatis的crud方法 增加 批量删除都没有问题 单单就是这个根据ID删除有问题 解决方案&#xff1a;真的就是pom文件的问题 自己的版本是Intelli…

Fully Convolutional Networks for Semantic Segmentation--论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/abs/1411.4038 3.数据集地址 论文摘要的翻译 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们表明&#xff0c;卷积网络本身&#xff0c;经过端到端&#xff0c;像素对像素的训练&#xff0c;在…

【新能源大巴BMS结构与乘用车的区别】

新能源大巴BMS结构与乘用车的区别 这篇文章主要介绍新能源大巴的电池和BMS的结构与乘用车的区别。 主要有&#xff0c;新能源大巴行业、新能源电池系统结构和新能源大巴的BMS系统。 第一部分 新能源大巴行业 其实数数全球的商用车(大巴卡车)&#xff0c;大致的方向还是沿着就…

解释 Vue route和router的区别?

Vue中的route和router在单页应用&#xff08;SPA&#xff09;开发中扮演着不同的角色&#xff0c;它们的区别可以归纳为以下几点&#xff1a; 定义与功能&#xff1a; router&#xff1a;router是Vue Router的一个实例对象&#xff0c;它是全局的。通过Vue.use(VueRouter)和Vue…