前言:
- 牛客竞赛bilibili官方题解更为详细
- 点击此处进入bilibili牛客竞赛
- 本题的D-F题代码均摘自于牛客官方题解
A - 相遇
思路:
- 枚举即可
以下是代码部分
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
if(a == b) cout << "p";
else if(a == 1 && b == 2) cout << 'a';
else if(a == 2 && b == 3) cout << "a";
else if(a == 3 && b == 1) cout << 'a';
else cout << 'b';
return 0;
}
B-宝石
思路:
- 总共就两种最短路的方法
- 只通过路径长度为
A
的路拿取宝石,路程总和为11*A
- 通过1条长度为
A
,5条长度为B
的途径拿取宝石 路程总和为:A+5*B
。
- 只通过路径长度为
- 选取路程最短的路,输出。
以下是代码部分
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << min(11 * a, 5 * b + a);
return 0;
}
C - 相助
思路:
- 因为此题
a[i]
只有0
和1
两种元素,所以分类讨论即可- 当开头元素等于末尾元素时: 操作数为
1
- 当元素数量
n=1
时:不可操作,输出:-1
- 当第
i
位元素和开头元素相等,并且i+1
位元素和结尾元素相等时,操作数为:2
。 - 都不符合的情况,为不可操作,输出:
-1
- 比如:
0100001
符合情况4
- 比如:
- 当开头元素等于末尾元素时: 操作数为
以下是代码部分
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int a[N];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i ++)
cin >> a[i];
//取头位置元素, 取尾位置元素
int head = a[1], tail = a[n];
//情况2