FZU 1914 Funny Positive Sequence
2016-04-19 20:20
423 查看
题目链接:Funny Positive Sequence
题意:给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个数列的这n种变换里,
A(0): a1,a2,…,an-1,an
A(1): a2,a3,…,an,a1
…
A(n-2): an-1,an,…,an-3,an-2
A(n-1): an,a1,…,an-2,an-1
有多少是正的数列。
思路:比赛的时候想了很久很久,肯定是要求在一次线性扫描里solve这个两重循环才能解决的问题,最后想到应该是计算负数会影响的项,然后大腿就想出来了。
很巧妙地线性扫描,每次只要向前遍历,看这个负数会影响到哪一项,继续向前找就可以了,有些负数可以跳过的,于是就是一次循环解决了,模拟一下过程就知道了。注意最后,要扫描到temp>0或者直接扫描到i=0就可以了。【ACMer的脑洞可怕....】
题意:给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个数列的这n种变换里,
A(0): a1,a2,…,an-1,an
A(1): a2,a3,…,an,a1
…
A(n-2): an-1,an,…,an-3,an-2
A(n-1): an,a1,…,an-2,an-1
有多少是正的数列。
思路:比赛的时候想了很久很久,肯定是要求在一次线性扫描里solve这个两重循环才能解决的问题,最后想到应该是计算负数会影响的项,然后大腿就想出来了。
很巧妙地线性扫描,每次只要向前遍历,看这个负数会影响到哪一项,继续向前找就可以了,有些负数可以跳过的,于是就是一次循环解决了,模拟一下过程就知道了。注意最后,要扫描到temp>0或者直接扫描到i=0就可以了。【ACMer的脑洞可怕....】
#include <stdio.h> #include <string.h> #include <iostream> #define maxn 500010 using namespace std; double a[maxn]; int cas = 0; int main() { int t; scanf("%d", &t); while(t--) { int n; scanf("%d", &n); for (int i=0; i<n; ++i) { scanf("%lf", &a[i]); } double temp = 0; bool vis[maxn]; memset(vis, 0, sizeof(vis)); bool flag = true; int sum = n; for (int i=n-1; i>=0; --i) { if (a[i]<=0 && flag) flag = false; if (flag == false) { temp += a[i]; if (temp <= 0) vis[i] = 1, sum--; else flag = true, temp = 0; } } if (temp <= 0) { for (int i=n-1; i>=0; --i) { temp += a[i]; if (temp <= 0 && !vis[i]) { vis[i] = 1; sum--; } else if (temp > 0) break; } } printf("Case %d: %d\n", ++cas, sum); } return 0; }
相关文章推荐
- UI自动布局
- FZU 1914 Funny Positive Sequence
- GUI实现显示当前时间
- GUI实现万年历
- 浅学设计模式之建造者(Buildler Pattern)模式及在android中的应用
- 12rescue
- poj 2299 Ultra-QuickSort(求逆序对)
- SDUT 2603:Rescue The Princess
- ios uicollectionview滚动速度/灵敏度调节
- UIButton修改文字大小问题
- Android酷炫实用的开源框架(UI框架)
- String、StringBuffer与StringBuilder之间区别
- 5GridView FruitAdapter.java
- @PATHVARIABLE和@REQUESTPARAM的区别,@SESSIONATTRIBUTES
- 怎么给easyui中的datagrid加水平滚动条
- easyui扩展 - 编辑单个cell
- iOS UICollectionLayout 自定义
- UILabel 分段改变文字颜色和字体
- easyui扩展 - 鼠标放上后浮动提示
- easyui扩展 - 最大长度限制