您现在的位置是:首页 > Javascript
当前栏目
蓝桥杯2018年真题-交换次数
2023-04-18 14:23:05 时间
知识点:无穷大的定义0x3f3f3f3f
为什么无穷大总是0x3f3f3f3f而不是0x7fffffff?
题目:
IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。
招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:
ABABTATT,这使得应聘者十分别扭。
于是,管理部门要求招聘方进行必要的交换位置,使得每个集团的席位都挨在一起。即最后形如:
BBAAATTT 这样的形状,当然,也可能是:
AAABBTTT 等。
现在,假设每次只能交换2个席位,并且知道现在的席位分布,
你的任务是计算:要使每个集团的招聘席位都挨在一起需要至少进行多少次交换动作。
输入:
输入是一行n个字符(只含有字母B、A或T),表示现在的席位分布。
n<=104
输出:
输出是一个整数,表示至少交换次数。
思路:
暴力:6种排列方式
宏观可分为3个区ABC
交换次数=A区非A个数+B区C的个数+B区A的个数-min(A区B的个数,B区A的个数)
然后比较6种排列中,交换次数最小的是几次
代码:
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
string str;
int mn = 0x3f3f3f3f;//定义一个无穷大
char t[6][4] = { "ABT", "ATB", "BAT","BTA","TAB","TBA"};
int changes(char A, char B, char C) {
int a=0, b=0, c=0,num=0,numb=0,numa=0,numc=0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == A)
a++;
else if (str[i] == B)
b++;
else if (str[i] == C)
c++;
}
for (int i = 0; i < a; i++) {
if (str[i] != A)
num++;
if (str[i] == B)
numb++;
}
for (int i = a; i < a + b; i++) {
if (str[i] == A)
numa++;
if (str[i] == C)
numc++;
}
num += numa + numc - min(numa,numb);
return num;
}
int main() {
cin >> str;
for (int i = 0; i < 6; i++) {
mn = min(mn, changes(t[i][0], t[i][1], t[i][2]));
}
cout << mn << endl;
return 0;
}
相关文章
- 前端面试 【JavaScript】— typeof 是否能正确判断类型?
- 前端面试 【JavaScript】— instanceof 能否判断基本数据类型?
- 前端面试 【JavaScript】— 能不能手动实现一下 instanceof 的功能?
- 前端面试 【JavaScript】— Object.is和=== 有什么区别?
- 前端面试 【JavaScript】— JS中类型转换有哪几种?
- 前端面试 【JavaScript】— == 和 ===有什么区别?
- 前端面试 【JavaScript】— 对象转原始类型是根据什么流程运行的?
- JavaScript 的 parseInt() 函数
- javascript实现两个数字进行组合
- JS监听键盘按键
- 大前端开发中的路由管理之五:Flutter篇
- Javascript的DOM操作
- 在Vue项目中使用WebSocket技术
- 新手向:前端程序员必学基本技能——调试JS代码
- React 毁了 Web 开发!
- 「JS 逆向百例」cnki 学术翻译 AES 加密分析
- 商标注册域名后缀用什么?商标和域名有哪些区别?
- 网站建设流程是怎样的?需要看重哪些细节?
- 网站域名商标注册流程是什么?网站域名商标有什么用?
- 如何建设一个实用性强的网站 网站上线后如何运营