牛客周赛 Round 48

A

最大值

1
2
3
4
5
6
7
8
9
10
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int a,b,c;
cin>>a>>b>>c;
int res=max(a,max(b,c));
cout<<(res-a)+(res-b)+(res-c);
return 0;
}

B

直接暴力即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>

using namespace std;
string s;
int ans=0;

int solve(int a,int b) {
int res=0;
while(a<b){
if(s[a]!=s[b]) res+=1;
a++;
b--;
}
return res;
}

int main()
{
cin>>s;
for(int i=0;i<s.length();++i){
for(int j=i+1;j<s.length();++j){
ans+=solve(i,j);
}
}
cout<<ans;
return 0;
}

C

奇数肯定不可以

然后从首部开始即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,cnt=0;cin>>n;
string s1,s2;cin>>s1>>s2;
for(int i=0;i<n;++i){
cnt+=(s1[i]!=s2[i]);
}
if(cnt%2==1)cout<<-1<<endl;
else{
vector<int>ans;
for(int i=0;i<n-1;++i){
if(s1[i]!=s2[i])
{
ans.push_back(i);
if(s1[i]=='0')
s1[i]='1';
else
s1[i]='0';
if(s1[i+1]=='0')
s1[i+1]='1';
else
s1[i+1]='0';
}
}
cout<<ans.size()<<endl;
for(auto a:ans)
cout<<a+1<<' '<<a+2<<endl;
}
return 0;
}

D

进行dp讨论即可

1
2
3
4
5
6
7
8
9
10
11
12
// dp[0] 没有进行操作
// 最后一个数没有进行操作
// dp[1] 进行过乘操作
// dp[2] 进行过除操作
// dp[3] 进行两个操作

// 最后一个数进行操作
// dp[4] 进行乘操作 之前没有别的操作
// dp[5] 进行乘操作 之前有除法的操作
// dp[6] 进行除操作 之前没有别的操作
// dp[7] 进行除操作 之前有乘法的操作
// dp[8] 对最后一个数进行 两个操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++)
cin >> a[i];

vector<vector<int>> dp(n + 1, vector<int>(9));
dp[1][1] = 1e18;
dp[1][2] = 1e18;
dp[1][3] = 1e18;
for (int i = 2; i <= n; i++)
{
int t = abs(a[i - 1] - a[i]);
dp[i][0] = dp[i - 1][0] + t;
dp[i][1] = min(dp[i - 1][1] + t, dp[i - 1][4] + abs(a[i - 1] * 2 - a[i]));
dp[i][2] = min(dp[i - 1][2] + t, dp[i - 1][6] + abs(a[i - 1] / 2 - a[i]));
dp[i][3] = min(dp[i - 1][3] + t, dp[i - 1][8] + abs(a[i] - a[i - 1] / 2 * 2));
dp[i][3] = min({ dp[i][3], dp[i - 1][5] + abs(a[i - 1] * 2 - a[i]), dp[i - 1][7] + abs(a[i - 1] / 2 - a[i])});

dp[i][4] = dp[i - 1][0] + abs(a[i - 1] - a[i] * 2);
dp[i][5] = min(dp[i - 1][2] + abs(a[i - 1] - a[i] * 2), dp[i - 1][6] + abs(a[i - 1] / 2 - a[i] * 2));

dp[i][6] = dp[i - 1][0] + abs(a[i - 1] - a[i] / 2);
dp[i][7] = min(dp[i - 1][1] + abs(a[i - 1] - a[i] / 2), dp[i - 1][4] + abs(a[i - 1] * 2 - a[i] / 2));
dp[i][8] = dp[i - 1][0] + abs(a[i - 1] - a[i] / 2 * 2);
}
cout << min({ dp[n][3], dp[n][5], dp[n][7], dp[n][8] }) << "\n";
}