51Nod-1414-冰雕
2016-08-13 02:15
288 查看
ACM模版
Two:
描述
题解
一开始高估了这道题难度,一直在想从中发现规律( ̄┰ ̄*),结果,╮(╯_╰)╭,只好暴力解之……还真的过了,这里给出一种一般的暴力解法和一种略微优化的暴力解题思路。代码
One:// 常规暴力解法 #include <iostream> #include <cstdio> using namespace std; const int MAXN = 2e4 + 10; int T[MAXN]; int main(int argc, const char * argv[]) { int n; while (cin >> n) { int sum = 0; for (int i = 1; i <= n; i++) { scanf("%d", T + i); sum += T[i]; } int ans = sum; for (int i = 3; i <= n / 2; i++) { if (n % i) { continue; } int key = n / i; for (int j = 1; j <= key; j++) { sum = 0; for (int k = j; k <= n; k += key) { sum += T[k]; } if (sum > ans) { ans = sum; } } } cout << ans << '\n'; } return 0; }
Two:
// 略微优化解法 #include <stdio.h> #define MAXN 20000 #define INF 0x3f3f3f3f #define MAX(a, b) ((a) > (b) ? (a) : (b)) int n; int a[MAXN * 2]; int calc(int cnt, int step) { int ans = -INF; int tmp; for (int i = 0; i < step; ++i) { tmp = 0; for (int j = 0; j < n; j += step) { tmp += a[i + j]; } ans = MAX(ans, tmp); } return ans; } int main() { int i, x, y; int ans = -INF; int tmp; scanf("%d", &n); for (i = 0; i < n; ++i) { scanf("%d", a + i); a[i + n] = a[i]; } for (x = 1; x * x <= n; ++x) { if (n % x) // 不能x等分或者n/x等分 { continue; } y = n / x; if (x >= 3) // x等分 { tmp = calc(x, y); ans = MAX(ans, tmp); } if (y >= 3) // y等分 { tmp = calc(y, x); ans = MAX(ans, tmp); } } printf( "%d\n", ans ); return 0; }
相关文章推荐
- 51NOD 1414 冰雕【水】
- 51nod 1414 冰雕
- 51Nod 1414 冰雕 (暴力模拟)
- 51nod 1414 冰雕【思维+暴力】
- 51NOD-1414 冰雕
- 51nod 1414 冰雕 (水题)
- 51nod 1414 冰雕 思路:暴力模拟题
- 51nod 1402最大值 1414冰雕 暴力
- 51nod 1414 冰雕
- 51nod 1414 冰雕(思维+暴力)
- 51Nod - 1414 冰雕问题
- 51NOD 1414 冰雕(暴力)
- 51nod 1414 冰雕
- 51Nod 1414 冰雕
- 1414 冰雕 51nod 暴力
- 51Nod - 1414 暴力
- 51Nod-冰雕(暴力)
- 1088 最长回文子串 分类: 51nod 2015-07-20 22:09 8人阅读 评
- 51nod 1163 最高的奖励 (贪心/贪心+优先队列)
- 51nod 1640 天气晴朗的魔法 prime队列+最小生成树+最大生成树+邻接表