http://codeforces.com/problemset/problem/821/B
题目很简单,就是给出一个线段,然后在他和x轴,y轴围成的区域中取出一个矩形然后算出他的和,每个点的值是x+y。要求所取矩阵的所有点的值加起来尽量大。
我不知道我的猜想是不是对的,就是尽量取中间的点。所以我想到的方法就是暴力,直接每个矩形都暴力出来即可。取出最大值。然后就是这个算等差数列求和的时候会有爆long long的情况,所以要注意到。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll myget(ll x, ll y){
ll tmp = 0;
if(x <= y){
ll n = y + 1;
for(ll i = 0; i <= x; i++){
tmp += n * i + n * (n - 1) / 2;
}
}
else{
ll n = x + 1;
for(ll i = 0; i <= y; i++){
tmp += n * i + n * (n - 1) / 2;
}
}
return tmp;
}
int main(){
ll m, b, x, ans = 0, tmp;
cin >> m >> b;
for(ll y = b; y >= 0; y--){
x = (y - b) * (-m);
tmp = myget(x, y);
ans = max(ans, tmp);
}
cout << ans << endl;
return 0;
}