Codeforces Round 872 (Div. 2)(前三道

本文介绍了三个编程问题的解决方案:如何检查字符串是否为回文并删除一个字符使其非回文,如何在二维表格中找到最大和次大值以覆盖最大面积,以及如何在特定操作下优化表演顺序。这些问题涉及字符串处理、排序、贪心策略和数据结构的使用。

A.LuoTianyi and the Palindrome String

思路:当回文有不同元素是只用删掉一个不同元素就可以破坏回文。

#include<bits/stdc++.h>
using namespace std;
int t;
string a;
void slove(){
	int len = a.size();
	char tmp = a[0];
	for (int i=0;i<(len-1)/2+1;i++){
		if (tmp!=a[i]){
            cout<<len-1<<endl;
            return;
        }
	}
	cout<<-1<<endl;
	return;
}
int main(){
	cin>>t;
	while(t--){
		cin>>a;
		slove();
	}
}

B.LuoTianyi and the Table
 

思路:获取能得到的最大值h1和次最大值l1,并且让最大值覆盖的范围最大(n-1)*(m-1)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n,m,b[110000];
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		for (int i=1;i<=n*m;i++) cin>>b[i];
		sort(b+1,b+n*m+1);
		ll H1 = b[n*m]-b[1],L1 = b[m*n-1]-b[1];// 有负数的情况
		if (n<m) swap(n,m);
		if (H1<L1) swap(H1,L1);
		ll ans = H1*(n-1)*m+L1*(m-1);
		ll H2 = b[m*n]-b[1],L2 = b[m*n]-b[2];// 无负数的情况
		if (H2<L2) swap(H2,L2);
		ans = max(ans,H2*(n-1)*m+L2*(m-1));
		cout<<ans<<endl;
	}
}


 

c.LuoTianyi and the Show

  1. 考点:排序+贪心
  2. 思路:考虑三种情况:1.左边(指-1操作)先开始放,那么只能和插入(xi)操作配合;2.右边(指-2操作)先开始放,也只能和插入(xi)操作配合;3.先插入一个值,再在他的左右放。
  3. 如何实现:将会插入的值放入set(能自动排序);-1,-2使用map来记录出现次数;情况1就直接map[-1]+set.size()(因为放左边的操作碰到可以插入时,可以先插入再放左边),情况2同理map[-2]+set.size(),,情况3就遍历set,得到的一般式:set.size()+左边有几个空位最多放map[-1]+右边有几个空位最多放map[-2]。
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
set<int> a;
map<int,int> mapp;
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		mapp[-1]=0;mapp[-2]=0;a.clear();
		for (int i=1,num;i<=n;i++){
			cin>>num;
			if (num==-1||num==-2) 
				mapp[num]++;
			else
				a.insert(num);
		}
		int len = a.size();
		int ans = max(min(mapp[-1]+len,m),min(mapp[-2]+len,m));
		int l = 0;
		for (auto tmp : a){
			ans = max(ans,len+min(mapp[-1],tmp-l-1)+min(mapp[-2],m-tmp-(len-l-1)));
			l++;
		}
		cout<<ans<<endl;
	}
}

下面笔者能力不够搞不了了qwq

D的除法取余可以看这篇(13条消息) 乘法逆元详解【费马小定理+扩展欧几里得算法】_LZRcqbz的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cando-01

随心而动,随性而为。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值