COJ-1008-Horcrux

1008: Horcrux

Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 610 Solved: 165
Description
A Horcrux is an object in which a Dark wizard or witch has hidden a fragment of his or her soul for the purpose of attaining immortality. Constructing a Horcrux is considered Dark magic of the foulest, most evil kind, as it violates laws of nature and morality, and requires a horrific act (a.k.a. murder) to accomplish.

There are two kinds of horcruxes, the white one, denoted as △, and the black one, denoted as ▲. Topper has got N horcruxes, and he wants to destroy them to win the Dark wizard. Toper places all the horcruxes in a line from left to right, one by one, and then says a magic spell to destroy them. In order to make the magic spell works, Toper needs to know the number of the white horcruxes.

Since the horcruxes also has magic, when placing the horcruxes, they will change color from white to black or from black to white under the following rules:

When Topper places the i-th horcrux and i is an even number: If the i-th horcrux and the rightmost horcrux have different colors, all consecutive horcruxes of the same color on the right change its color.

In other situations, no magic works.
For example, suppose the horcruxes on the line are:

△△▲▲△△△
After placing 7 horcruxes.

If the 8-th horcrux is white, since its color and the color of the rightmost horcrux are the same. Therefore, the horcruxes on the line become as follows:

△△▲▲△△△△
If the 8-th horcrux is black, since its color and the color of the rightmost horcrux are different, the 3 consecutive white stones on the right change their color. Therefore, the stones on the line become as follows:

△△▲▲▲▲▲▲
You see, it’s not an easy job to beat the Dark wizard. So write a program to help Topper.

Input
There are some test cases. In each test case, the first line contains a positive integer n (1≤n≤100,000), which is the number of horcruxes. The following n lines denote the sequence in which Topper places the horcruxes. 0 stands for white horcrux, and 1 stands for black horcrux.

Output
For each test case, output one line containing only the number of white horcruxes on the line after Topper places n horcruxes.

Sample Input
8
1
0
1
1
0
0
0
0
8
1
0
1
1
0
0
0
1
Sample Output
6
2
Hint
Source
中南大学第五届大学生程序设计竞赛

题目大意:依次放置黑白块,满足条件就翻转,求最终白块数量
解题思路:用栈记录连续块的数量,最后隔项相加即可

#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int MAXN=100010;
int s[MAXN];

int main()
{
    ios::sync_with_stdio(false);
    int n;
    while(cin>>n)
    {
        memset(s,0,sizeof(s));
        int now;
        cin>>now;
        int top=0;
        s[++top]=1;
        int tmp;
        for(int i=2;i<=n;i++)
        {
            cin>>tmp;
            if(!(i&1)&&tmp!=now)
            {
                if(top-1>=1)
                {
                    s[top-1]+=(s[top]+1);
                    top--;
                    now=tmp;
                }else
                {
                    s[top]++;
                    now=tmp;
                }
            }else
            {
                if(tmp==now)  s[top]++;
                else
                {
                    s[++top]=1;
                    now=tmp;
                }
            }
        }
        int ans=0;
        if(now==0)
        {
            for(int i=top;i>=1;i-=2)
                ans+=s[i];
        }else
        {
            for(int i=top-1;i>=1;i-=2)
                ans+=s[i];
        }
        cout<<ans<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值