https://codeforces.com/contest/1986
A暴力枚举一下所有可能
void solve()
{
int a , b , c;
cin >> a >> b >> c;
int ans = 100;
for(int i = 0 ; i <= 10 ; i ++){
ans = min(ans , abs(i - a) + abs(i - b) + abs(i - c));
}
cout << ans << endl;
}
B若一个数比周围四个数都大,那么最终会变成四个数当中最大的哪一个,遍历即可
# include <bits/stdc++.h>
using namespace std;
int n,m;
int dx[]={0,0,-1,1},dy[]={1,-1,0,0};
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>m;
int arr[n+1][m+1]={0};
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>arr[i][j];
bool st=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int mx=0;
if(i-1>=1)
mx=max(arr[i-1][j],mx);
if(i+1<=n)
mx=max(arr[i+1][j],mx);
if(j-1>=1)
mx=max(arr[i][j-1],mx);
if(j+1<=m)
mx=max(arr[i][j+1],mx);
if(arr[i][j]>mx&&mx!=0)
arr[i][j]=mx;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<arr[i][j]<<" ";
cout<<endl;
}
}
return 0;
}
C
对字符串c以及ind数组进行排序,通过贪心可以知道,我们需要按照索引从小到大的修改字符串,同时一个位置只会有一个字母与之对应,重复的索引用小的字母覆盖大的字母操作,因此只需要同时按照字符串c从小到大修改即可。
# include <bits/stdc++.h>
using namespace std;
int n,m;
string s1,s2;
const int N=1e5+01;
bool st[N];
int main()
{
int T;
cin>>T;
while(T--)
{
memset(st,0,sizeof st);
cin>>n>>m;
cin>>s1;
set<int>v;
for(int i=0;i<m;i++)
{
int x;
cin>>x;
v.insert(x);
}
cin>>s2;
sort(s2.begin(),s2.end());
int k=0;
for(auto x:v)
{
if(!st[x-1])
{
st[x-1]=1;
s1[x-1]=s2[k];
k++;
}
}
cout<<s1<<endl;
}
}
D一定有一个两位数,因此我们可以枚举这个两位数,然后取最小值
若存在数字0,那么可以通过都用乘法来将最终结果变成0,此外,若存在数字1,可以通过乘法将1消掉。除此之外的数,都是加法更加小。按照此策略来模拟即可
#include<bits/stdc++.h>
using namespace std;
int join(char a, char b)
{
return (a - '0') * 10 + b - '0';
}
int solve(int n, string s)
{
if (n == 2)
return (s[0] - '0') * 10 + s[1] - '0';
int cnt = 0;
for (auto i : s)
if (i == '0')
cnt++;
if (n > 3 && cnt || s[0] == '0' || s[n - 1] == '0')
return 0;
int sum = 0;
for (auto i : s)
if (i != '1')
sum += i - '0';
int ans = 0x3f3f3f3f;
for (int i = 0; i < n - 1; i++)
{
int dig = sum;
if (s[i] != '1')
dig -= s[i] - '0';
if (s[i + 1] != '1')
dig -= s[i + 1] - '0';
if (join(s[i], s[i + 1]) != 1)
dig += join(s[i], s[i + 1]);
ans = min(ans, dig);
}
return ans == 0 ? 1 : ans;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int n;
string s;
cin >> n >> s;
cout << solve(n, s) << endl;
}
}