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 条评论

目前还没有评论...