- 分享
Day 3
- @ 2024-10-4 15:14:57
T1
大意:
两种操作方式:
1:把n个数进行n-1次减法,要使得数最大
2:把n个数进行n-1次求余,要使得数最大
思路:
k=1时,发现答案为:总和-最小值*2
k=2时,发现答案为:最小值
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,k,ans=INT_MAX;
long long sum=0;
int main(){
freopen("divmod.in","r",stdin);
freopen("divmod.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
long long x;
cin>>x;
ans=min(x,ans);
sum+=x;
}
sum-=2*ans;
if(k==1) cout<<abs(sum);
else cout<<ans;
return 0;
}
//🈲抄袭
//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
T2
大意:
把一个字符串改成回文字符串,且字典码最小
思路:
可以先找不同,再进行更改,如果本来就是回文字符串,就找最边上且不是a的字符,给他改成a
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("hw.in","r",stdin);
freopen("hw.out","w",stdout);
string s;
cin>>s;
int ans=0,x=-1,y=-1;
for (int i=s.size()-1;i>=s.size()/2;i--){
if(s[i]==s[s.size()-1-i]) continue;
ans++;
if(ans==1){
x=s.size()-1-i;
}else if(ans==2){
y=s.size()-1-i;
}
}
if(ans==2){
char a=min(s[x],s[s.size()-1-x]);
char b=min(s[y],s[s.size()-1-y]);
s[x]=s[s.size()-1-x]=a;
s[y]=s[s.size()-1-y]=b;
}else if(ans==1){
char a=min(s[x],s[s.size()-1-x]);
s[x]=s[s.size()-1-x]='a';
if(a=='a' && s.size()%2==1){
s[s.size()/2]='a';
}
}else if(ans==0){
for(int i=0;i<s.size();i++){
if (s[i]!='a'){
s[i]=s[s.size()-1-i]='a';
break;
}
}
}
cout<<s;
return 0;
}
//🈲抄袭
//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭//🈲抄袭
0 条评论
目前还没有评论...