UVa11059 Maximum Product
来源:互联网 发布:js从入门到精通pdf 编辑:程序博客网 时间:2024/05/18 03:52
题意 求最大连续子序列的积
思路 本题可以暴力枚举起始和终止位置,O(n^2),不过为了练习,写了一个O(n)的算法,总体来算法不过简练
大致思路,就是正反两个方向遍历数组,预处理对所有负数的位置,保存在下一个0前还有几个负数,在上一个0后还有几个负数,然后双向遍历,遇到正数,更新sum,遇到0,清空sum,更新max,遇到负数,要判断若当前sum是负数或者该负数后,在下一个0前还有负数,则更新sum,否则清空sum。
#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <vector>#include <algorithm>using namespace std;#define MAX 20typedef long long ll;typedef pair<int,int> Pll;#define fi first#define se second#define MP make_pairint n;ll max1 = 0;ll a[MAX];Pll b[MAX];int main(){int i,j;int T = 0;while(scanf("%d",&n) == 1){for(i=0;i<n;i++)scanf("%lld",&a[i]);T++;max1 = 0;int count = 0;for(i=n-1;i>=0;i--){if(a[i] < 0)b[i].fi = count++;else if(a[i] == 0)count = 0;}count = 0;for(i=0;i<n;i++){if(a[i] < 0)b[i].se = count++;else if(a[i] == 0)count = 0;}ll sum = 1;bool flag = 0;for(i=0;i<n;i++){if(a[i] > 0){sum *= a[i];flag = 1;}else if(a[i] == 0){max1 = max(sum,max1);sum = 1;}else{if(sum < 0 || b[i].fi > 0){sum *= a[i];flag = 1;}else{max1 = max(sum,max1);sum = 1;}}}max1 = max(sum,max1);sum = 1;for(i=n-1;i>=0;i--){if(a[i] > 0){sum *= a[i];flag = 1;}else if(a[i] == 0){max1 = max(sum,max1);sum = 1;}else{if(sum < 0 || b[i].se > 0){sum *= a[i];flag = 1;}else{max1 = max(sum,max1);sum = 1;}}}max1 = max(sum,max1);if(flag == 0)printf("Case #%d: The maximum product is 0.\n\n",T);elseprintf("Case #%d: The maximum product is %lld.\n\n",T,max1);}return 0;}
0 0
- UVa11059 Maximum Product
- UVa11059 - Maximum Product
- UVA11059 - Maximum Product
- [UVA11059]Maximum Product[暴力]
- uva11059 Maximum Product
- UVA11059-Maximum Product
- UVa11059 Maximum Product
- UVA11059 Maximum Product
- UVA11059 Maximum Product
- UVA11059 Maximum Product
- UVA11059 Maximum Product(暴力)
- 最大乘积(Maximum Product,UVa11059)
- Uva11059——Maximum Product
- [UVA11059]Maximum Product 暴力求解入门
- Maximum Product
- Maximum Product
- UVA11059
- uva11059
- Django 如何发邮件?
- Spring IOC&AOP 深入剖析(史上最全,没有之一)
- 代码块的复用
- 十天学Linux内核之第四天---如何处理输入输出操作
- time_t的定义
- UVa11059 Maximum Product
- 基于jQuery的AJAX和JSON的实例
- Hadoop0.23.0初探1---前因后果
- 使用python 简单的保存网页的图片
- 如何生成类似xcode 默认词条
- Android 中 Handler 引起的内存泄露
- ViewTreeObserver
- 2014年下半年教学工作总结
- 三金叉见底