TA : 判断能否成为等差数列,注意a =b
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int main(){
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
int a,b;
cin >> a >> b;
if(a == b) cout <<1 << endl;
else abs(a-b)%2==0 ? cout << 3 <<endl :cout << 2 << endl;
return 0;
}
TB :
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef vector<int> vi;
int main(){
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
int t;
cin >>t;
vi l;
vi r;
while(t--){
int x;
char op;
cin >> x >>op;
if( op == 'L'){
l.push_back(x);
}
else{
r.push_back(x);
}
}
int ans = 0;
for(int i=0;i+1<l.size();i++){
ans += abs(l[i]-l[i+1]);
}
for(int i=0;i+1<r.size();i++){
ans += abs(r[i]-r[i+1]);
}
cout << ans << endl;
return 0;
}
T3:找到最长的一个等差数列,下一个等差数列必然从结尾i+1的位置开始,每一段任选一个区间都是可以的,在一段区间内,长度>=3的用等差数列求和公式计算即可
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
typedef vector<int> vi;
typedef pair<int,int>pii;
signed main(){
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
int t;
cin >>t;
vector<int> alls;
for(int i=0;i<t;i++){
int xx;
cin >>xx;
alls.push_back(xx);
}
int len = 2;
int ans = 0;
for(int i=2;i<t;i++){
if(alls[i] - alls[i-1] == alls[i-1] - alls[i-2]){
len ++;
}
else{
ans +=(len-1) *(len-2) / 2;
len = 2;
}
}
ans += (len-1) *(len-2) / 2;
cout << ans + 2*t -1 << endl;
return 0;
}
T4 偶数个monster有双倍经验,先记录一下奇偶性,设fi 0/1表示当前是偶数个还是奇数个,第i个可打可不打,exp就是前缀和
转移公式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)
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
typedef vector<int> vi;
typedef pair<int,int>pii;
signed main(){
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
int n;
cin >> n;
vi a(n+1);
for(int i=1;i<=n;i++){
cin >> a[i];
}
int inf = -1e18;
vector<vector<int>>dp(n+1,vector<int>(2,inf));
dp[0][0] = 0;
for(int i=1;i<=n;i++){
for(int j = 0;j<2;j++){
if(j){
dp[i][j] = max(dp[i-1][j],dp[i-1][j^1]+a[i]);
}
else{
dp[i][j]=max(dp[i-1][j],dp[i-1][j^1]+a[i]*2);
}
}
}
cout << max(dp[n][0],dp[n][1])<<endl;
return 0;
}