传送门
思路:思维题,每反转一个独立1(0011100,010此类)的代价是2。我们只要统计独立1的个数即可,注意特判全是1和1是前缀的情况。
/**
* From:
* Qingdao Agricultural University
* Created by XiangwangAcmer
* Date : 2019-11-10-21.50.43
* Talk is cheap.Show me your code.
*/
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<map>
#include<string>
#include<cstdlib>
#define ll long long
using namespace std;
const ll maxn = 1e6 + 5;
const ll minn = 1e9 + 5;
const ll mod = 1000000007;
const int INF = 0x3f3f3f3f;
const long long LIMIT = 4294967295LL;
vector<int>v[maxn];
int dp[maxn];
vector<int>G[maxn];
bool row[maxn], col[maxn];
bool flag = 0;
queue<int>q;
char a[maxn];
int main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
int sum = 0;
for(int i = 1; i <= n; i++)
cin >> a[i];
int flag1 = 0;
for(int i = 1; i <= n; i++)
{
if(a[i] == '1')
sum = 1;
else
{
flag1 = i;
break;
}
flag1 = i + 1;///防止全是b
}
for(int i = flag1; i <= n; i++)
{
if(a[i] == '1' && a[i + 1] != '1')
sum += 2;
}
cout << sum << endl;
return 0;
}