Hướng dẫn giải của Nam châm
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Gọi ~S~ là tổng khoảng cách giữa mọi cặp điểm ban đầu. Việc thực hiện phép toán trên hai nam châm ~i~, ~j~ với tham số ~t~ sẽ làm giảm ~S~ đi ~2(j - i - 1) \times t + 2t~. Do đó, cách thực hiện phép toán tối ưu là luôn chọn hai nam châm ~i~, ~j~ liên tiếp nhau, khi đó ~S~ sẽ giảm đi ~2d~. Tổng khoảng cách cuối cùng (khi không thể thực hiện thêm phép toán nào) luôn bằng ~0~. Do đó, tổng điểm tối đa nhận được sẽ là ~S/2~.
#include <bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; vector<long long> x(n); for(int i = 0; i < n; ++i) cin >> x[i]; long long sum = 0; for(int i = 1; i < n; ++i) { sum += (x[i] - x[i-1]) * i * (n - i); } cout << sum / 2.0 << endl; } int main() { cout << setprecision(30); int t; cin >> t; while (t--) solve(); return 0; }
Bình luận