JZOJ 3822. 【NOIP2014模拟9.9】逆光
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 3822. 【NOIP2014模拟9.9】逆光
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
Zyh養著n盆太陽花,它們被排在一列直線上。為了簡化問題,太陽花的朝向只有向左和向右這兩種。Zyh非常喜歡這些花,于是他在每盆花的上方放置了光源。
太陽花和Zyh幸福地生活著,然而每次要關掉這些光源的時候就會出現一個問題。因為Zyh的動作問題,他每次只能關掉一個光源,在關掉這個光源后,這個光源下方的花就會休眠。然而,對于每一個未休眠的太陽花,如果它的朝向向左,那么每看到一個在它左邊的光源關閉,它就會認為自己的人生有些黑暗,于是對Zyh的好感減1。同樣地,如果它的朝向向右,那么每看到一個在它右邊的光源關閉,也會導致它對Zyh的好感減1。
Zyh不想看到太陽花對他的好感下降太多。于是他想知道關掉所有燈后,太陽花下降的好感總值是多少。
Input
輸入包含兩行。第一行是一個數正整數n表示太陽花的盆數。然后第二行是n個由空格隔開的0或1。0表示向左,1表示向右。
Output
只有一個數,太陽花下降的好感總值。
Sample Input
輸入1:
5
0 0 0 1 0
輸入2:
5
1 0 1 0 1
Sample Output
輸出1:
1
輸出2:
3
Data 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[N],f[N]; 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; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JZOJ 3822. 【NOIP2014模拟9.9】逆光的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 读入优化与输出优化 模板
- 下一篇: JZOJ 3813. 【NOIP2014