题解:CF2284A1 15K4JR3B (Easy Version)

· · 题解

中文题面:洛谷剪贴板\ 题目传送门:洛谷 and codeforces\ 提交记录:#398128949 on codeforces

P1:题意

给定 n 次操作,每次可以让三个点 A,B,C(初始都在原点)中的任意一个坐标增加或减少 1。求操作结束后,三角形 ABC 的最大二倍面积。

P2:思路

为了让面积最大,显然应该把三个点往互相远离的方向拉开:让 A 往左,B 往右,C 往上。

假设 A 移动了 d_1 步,B 移动了 d_2 步,C 移动了 d_3 步。总步数满足 d_1 + d_2 + d_3 = n。

此时底边长为 d_1 + d_2,高为 d_3。三角形二倍面积为:

S = (d_1 + d_2) \times d_3

令 x = d_1 + d_2,则 x + d_3 = n。为了让 x \times (n - x) 最大,根据二次函数的性质,当 x 尽可能接近 n/2 时取得最大值。

因此最大二倍面积就是 \lfloor \frac{n^2}{4} \rfloor。

P3:实现

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        cout<<(n*n)/4<<"\n";
    }
    return 0;
}