北京邀请赛 B. Beautiful Garden

来源:互联网 发布:sql语句更改表名 编辑:程序博客网 时间:2024/05/24 11:14

题意:给你坐标和n个点,求最少移动的点使得n个点成等差数列

思路:既然要成等差数列,那么最起码有两个点是不动的,然后枚举这两个点中间的点的个数,最近水的要死,看了队友的代码做的

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cstdlib>#include <cmath>using namespace std;const double eps = 1e-9;const int INF = 0x3f3f3f3f;int n;double x[45];int main() {int cas = 1,t;scanf("%d", &t);while (t--) {scanf("%d", &n);for (int i = 0; i < n; i++) scanf("%lf", &x[i]);sort(x, x+n);printf("Case #%d: ", cas++);if (n == 1){printf("0\n");continue;}int ans = INF;for (int i = 0; i < n; i++)for (int j = i+1; j < n; j++) for (int k = 1; k < n; k++) {int count = 0;double d = (x[j]-x[i])/k;double cur = x[i]-d;int cnt = 0;for (int l = 0; l < n; l++) {cur += d;while (x[cnt] < cur && cnt < n)cnt++;if (cnt == n)break;if (fabs(cur-x[cnt]) < eps) {count++;cnt++;}}ans = min(ans, n-count);}printf("%d\n", ans);}return 0;}



0 0
原创粉丝点击