题目链接: http://codeforces.com/contest/895/problem/A
题目描述: 一个圆, 分成连续的两个部分, 问两个部分最小差值是多少?
解题思路: 只要找连续和 与180相距最小的就可以 ans 就是它的两倍, 然后用前缀和维护, 数据很小, 所以我直接暴力的
代码:
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <list> #include <iterator> #include <cmath> #include <cstring> #include <forward_list> using namespace std; const int maxn = 400; int a[maxn]; int main() { int n; cin >> n; for(int i = 0; i < n; i++) { cin >> a[i]; } if(n == 1) { cout << 360 << endl; return 0; } else { int min_v = 369; for(int i = 0; i < n; i++) { for(int j = i; j < n; j++) { int sum = 0; for(int k = i; k <= j; k++) { sum += a[k]; min_v = min(min_v, abs(180-sum)); } } } cout << 2 * min_v << endl; } return 0; }
思考: 这场CF打的太水了, 太水了, 第一题切出来就挂机了。 明天补B, C题。