A - 369 X可能在a,b的左 中,右三种可能,分别判断加入set中,最后输出set的个数。

#include <bits/stdc++.h>
#define int long long
using namespace std;


signed main()
{
	int a,b;
	cin>>a>>b;
	int ans=0;
	set<int> c;
	if((a+b)%2==0)
	{
		//c.push_back((a+b)/2);
		c.insert((a+b)/2);
	}
	c.insert(2*a-b);
	c.insert(2*b-a);
	cout<<c.size();
	return 0;
	
}

B - Piano 3 对左手和右手分别顺序遍历操作求得a[i]-a[i-1],再加在一起。

#include <bits/stdc++.h>
#define int long long
using namespace std;


signed main()
{
	int t;
	cin>>t;
	vector<int> a;
	vector<int> b;
	for(int i=0;i<t;i++)
	{
		int aa;
		char bb;
		cin>>aa>>bb;
		if(bb=='L')
		{
			a.push_back(aa);
		}
		else
		{
			b.push_back(aa);
		}
	}
	int ans=0;
	//sort(a.begin(),a.end());
	//sort(b.begin(),b.end());
	for(int i=1;i<a.size();i++)
	{
		//cout<<a[i]<<endl;
		ans+=abs(a[i]-a[i-1]);
		//cout<<ans<<endl;
	}
	for(int i=1;i<b.size();i++)
	{
		ans+=abs(b[i]-b[i-1]);
	}
	cout<<ans;
	return 0;
	
}

C - Count Arithmetic Subarrays 先做预处理,用该数减去上一个数。遍历数组,在从i数开始遍历,如果j和i一样则到这一直是等差数列,即i到j为题目要求的数列。这段序列中一共有(j-i)*(j-i+1)/2个连续的要求序列,ans加上后将i=j,继续往后遍历。

#include <bits/stdc++.h>
#define int long long
using namespace std;
//const int N=1e5+10;
//int a[N][N];
signed main()
{
	int t;
	cin>>t;
	vector<int> b;
	for(int i=0;i<t;i++)
	{
		int tt;
		cin>>tt;
		b.push_back(tt);
	}
	for(int i=b.size()-1;i>=1;i--)
	{
		b[i]-=b[i-1];
		//cout<<b[i]<<endl;
	} 
	int ans=t;
	int j;
	//cout<<t<<endl;
	//cout<<b.size();
	for(int i=1;i<b.size();i=j)
	{
		for(j=i;j<b.size()&&b[i]==b[j];j++);
	
		ans+=(j-i)*(j-i+1)/2;
	
		//cout<<ans<<endl;
	}
	cout<<ans;
	return 0;
	
}

D 转移公式f[i][0]=max(f[i-1][0],f[i-1][1]+exp *2) f[i][1] = max(f[i-1][1],f[i-1][0]+exp)

#include <bits/stdc++.h>
#define int long long

using namespace std;
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>(2,0));
	dp[0][1]=-1e14;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=1;j++)
		{
			if(j==1)
			{
				dp[i][j]=max(dp[i-1][0]+a[i],dp[i-1][1]);
			}
			else
			{
				dp[i][j]=max(dp[i-1][1]+2*a[i],dp[i-1][0]);
			}
		}
	}
	cout<<max(dp[n][0],dp[n][1]);
	return 0;
}