题意是现在有n个雕像把一个圆等分了,每一个雕像有一个吸引力。

叫你不移动雕像只去掉雕像让剩下的雕像还能等分这个圆,求剩下的雕像的吸引力之和的最大值。

显然去掉后剩下雕像的间隔应该是n的因子,因为这样才能使剩下的雕像等分圆。

这道题数据量不大,可以暴力枚举,模拟出每一种情况取最大值就可以了。

现在我们分析完这道题了,写一下步骤。

1.求出n的因子存在list中。

for(int i = ;i <= n/; i++){ if(n% i == ) l.push_back(i); }

2.遍历因子(因子是可以去取的间隔),遍历从1到因子作为第一个取的雕像(因为是一个圆,间隔相等有多种情况)。

  现在第一个雕像和间隔都确定了,只需要求和更新答案就好了。

    int ans = -*;
int sum;
for(it = l.begin(); it != l.end(); it++){
for(int j = ;j <= *it; j++ ){
sum = ;
for(int i = j;i <= n; i += *it){
sum += a[i];
}
ans = max(ans,sum);
}
}
cout << ans << endl;

加点注释,上上代码

#include <bits\stdc++.h>
using namespace std; int a[];
list <int> l; // 用来存 n的因子
list <int>::iterator it;
int main(){
int n;
cin >> n;
//求n的因子, n/3是题目要求不能少于3个
for(int i = ;i <= n/; i++){
if(n% i == ) l.push_back(i);
}
// for(it = l.begin();it != l.end(); it++){
// cout << *it << " " << endl;
// }
for(int i = ;i <= n; i++){
cin >> a[i];
} int ans = -*; //可能的最小值。
int sum; //对某一种情况求和 //遍历因子,即为间隔
for(it = l.begin(); it != l.end(); it++){
//遍历确定第一个雕像的位置,不清楚的话画个图。
for(int j = ;j <= *it; j++ ){
sum = ;
//求和
for(int i = j;i <= n; i += *it){
sum += a[i];
}
//更新答案
ans = max(ans,sum);
}
}
cout << ans << endl;
return ;
}

最新文章

  1. 修复 XE7 update1 发布 iOS 8.x 实机问题
  2. Webform——内嵌word编辑器
  3. 不区分大小写匹配字符串,并在不改变被匹配字符串的前提下添加html标签
  4. c程序设计语言_习题1-11_学习单元测试,自己生成测试输入文件
  5. NETSH WINSOCK RESET这条命令的含义和作用?
  6. ubuntu桌面环境配置及切换
  7. 用yum查询想安装的软件
  8. [置顶] 最优间隔分类器、原始/对偶问题、SVM的对偶问题——斯坦福ML公开课笔记7
  9. View中选择的数据行中的部分数据传入到Controller中
  10. Android记住密码自动登录的实现
  11. POJ 2484 A Funny Game(找规律)
  12. iOS开发 自定义UIAlertController的样式
  13. java cooki的使用
  14. java常用类--正则表达式
  15. JS最简单的字符串转数字类型
  16. day26 面向对象 单例模式总结
  17. Quartz入门及简单实现
  18. Flask web开发之路十二
  19. POJ3628:Bookshelf 2【01背包】
  20. php 字符串长度函数

热门文章

  1. [2012-06-29]sed根据行号范围执行替换
  2. winform 通过驱动注册ID检测是否已安装驱动
  3. WebStorm ES6 语法支持设置&amp;babel使用及自动编译
  4. Maven生成可以直接运行的jar包的多种方式
  5. Cython的用法以及填坑姿势
  6. poj 3522 Kruskal
  7. Linaro系统获取root权限方法
  8. C# 文件的操作
  9. 王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍
  10. 团队作业8——第二次项目冲刺(Beta阶段)5.18