A. Cherry
思路:找连续相邻乘积最大的
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int Max=1e5+7;
long long a[Max];
int main()
{
int t,i;
cin>>t;
while(t--)
{
long long n;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
long long sum=0;
for(i=0;i<n-1;i++)
sum=max(sum,a[i]*a[i+1]);
cout<<sum<<endl;
}return 0;
}
B.Cobb
传送门
思路:就是按照他给的公式暴力跑,我是从后往前跑,否者会TLE,也可以只跑后100个,我菜狗,不知道为什么
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const long long Max=1e5+7;
const long long INF=-9999999;
long long a[Max];
int main()
{
long long t,i,j;
cin>>t;
while(t--)
{
long long n,m;
cin>>n>>m;
for(i=1;i<=n;i++)
cin>>a[i];
long long sum=INF;
for(i=n-1;i>=1;i--)
{for(j=n;j>i;j--){
if((i*j)<sum)
break;
sum=max(sum,(i*j)-m*(a[i]|a[j]));}
}
cout<<sum<<endl;
}return 0;
}