JZOJ 3822. 【NOIP2014模拟9.9】逆光
2017-01-13 22:36
477 查看
Description
Zyh养着n盆太阳花,它们被排在一列直线上。为了简化问题,太阳花的朝向只有向左和向右这两种。Zyh非常喜欢这些花,于是他在每盆花的上方放置了光源。太阳花和Zyh幸福地生活着,然而每次要关掉这些光源的时候就会出现一个问题。因为Zyh的动作问题,他每次只能关掉一个光源,在关掉这个光源后,这个光源下方的花就会休眠。然而,对于每一个未休眠的太阳花,如果它的朝向向左,那么每看到一个在它左边的光源关闭,它就会认为自己的人生有些黑暗,于是对Zyh的好感减1。同样地,如果它的朝向向右,那么每看到一个在它右边的光源关闭,也会导致它对Zyh的好感减1。
Zyh不想看到太阳花对他的好感下降太多。于是他想知道关掉所有灯后,太阳花下降的好感总值是多少。
Input
输入包含两行。第一行是一个数正整数n表示太阳花的盆数。然后第二行是n个由空格隔开的0或1。0表示向左,1表示向右。Output
只有一个数,太阳花下降的好感总值。Sample Input
输入1:
50 0 0 1 0
输入2:
51 0 1 0 1
Sample Output
输出1:
1输出2:
3Data Constraint
对于 30% 的数据 n<10对于 70% 的数据 n<=5000
对于 100% 的数据 n<=1000000
Solution
这题一看数据吓一跳:n<=1000000但是仔细推敲,发现一个神奇的结论:
只会先关完同边的灯!!!
因为这样之后就可以零花费处理了!
那么只需要扫一遍,利用前缀和累加一遍即可!
时间复杂度 O(N) 。
Code
#include<cstdio> using namespace std; const int N=1e6+1; int a ,f ; long long ans; inline int read() { int data=0; char ch=0; while(ch<'0' || ch>'9') ch=getchar(); while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar(); return data; } int main() { int n=read(); a[1]=read(); for(int i=2;i<=n;i++) { a[i]=read(); f[i]=f[i-1]; if(a[i-1]) f[i]++; } for(int i=n;i;i--) if(!a[i]) ans+=f[i]; printf("%lld",ans); return 0; }
相关文章推荐
- JZOJ 3823【NOIP2014模拟9.9】遇见
- JZOJ 3824【NOIP2014模拟9.9】渴
- 【NOIP2014模拟9.9】逆光 (Standard IO)
- 【JZOJ 3823】【NOIP2014模拟9.9】遇见
- JZOJ 3823. 【NOIP2014模拟9.9】遇见
- 【JZOJ3824】【NOIP2014模拟9.9】渴
- 【JZOJ3824】【NOIP2014模拟9.9】渴
- JZOJ 3806. 【NOIP2014模拟8.24】小X 的道路修建
- JZOJ 3813. 【NOIP2014模拟9.7】我要的幸福
- JZOJ 5354. 【NOIP2017提高A组模拟9.9】导弹拦截
- db49 JZOJ 3928. 【NOIP2014模拟11.6】射击
- JZOJ NOIP2014模拟 8.13
- [jzoj3889]【NOIP2014模拟10.25B组】序列问题
- JZOJ 3899. 【NOIP2014模拟】逻辑的连通性
- jzoj 2557. 【NOIP2011模拟9.9】单词分类
- JZOJ 3808 【NOIP2014模拟8.25】道路值守
- jzoj3796 【NOIP2014模拟8.21】议案决定
- jzoj 2558. 【NOIP2011模拟9.9】过河问题
- 【JZOJ】 【NOIP2014】【模拟试题】保镖排队
- {题解}[jzoj3806]【NOIP2014模拟8.24】小X 的道路修建