//201803-1
//模拟
#include <bits/stdc++.h>
using namespace std;
int main(){
int num;
int temp = 0;
int totalScore = 0;
for (int i = 0; i < 31; i++){scanf("%d", &num);
if (num == 0)
break;
if (i == 0 || temp == 1){
if (num == 2)
totalScore += 2;
else
totalScore++;}else{if (num == 2){
int reaTemp = temp + num;
totalScore += reaTemp;
temp = reaTemp;
continue;} else
totalScore++;}
temp = num;}printf("%d\n", totalScore);
return 0;}
//201803-1
#include <bits/stdc++.h>
using namespace std;
int main(){
int num, res = 0, cnt = 1;
while (scanf("%d", &num), num) num == 1 ? res++, cnt = 1 : res += 2 * cnt++;printf("%d\n", res);
return 0;}
//201803-2
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x;//小球位置
int index;//小球索引
bool flag;//true为向右移动,false为向左移动
} node[110];
int n, l, t;
bool isMeet(Node a){
int index = a.index;
for (int i = 0; i < n; i++)
if (i != index && a.x == node[i].x)
return true;
return a.x == l || a.x == 0;}int main(){scanf("%d%d%d", &n, &l, &t);
for (int i = 0; i < n; i++){scanf("%d", &node[i].x);
node[i].index = i;
node[i].flag = true;//默认向右移动
}//根据时间递减
//移动每个小球
while (t--){
//移动每个小球
for (int i = 0; i < n; i++)
if (node[i].flag)
node[i].x++;
else
node[i].x--;
//判断是否相遇,需要改变方向
for (int i = 0; i < n; i++)
if (isMeet(node[i]))
node[i].flag = !node[i].flag;}
for (int i = 0; i < n; i++){
if (i)printf(" ");printf("%d", node[i].x);}
return 0;}
//201803-2
//注意下右端点开始的位置
#include <bits/stdc++.h>
using namespace std;
struct Node{
bool flag;//true为向右
int now;//当前位置
int id;} node[110];
int n, l, t;
bool isMeet(Node a){
int index = a.id;
for (int i = 0; i < n; i++)
if (i != index)
if (node[i].now == a.now)
return true;
if (a.now == l || a.now == 0)
return true;
return false;}int main(){scanf("%d%d%d", &n, &l, &t);
for (int i = 0; i < n; i++)scanf("%d", &node[i].now), node[i].id = i, node[i].flag = true;//默认向右移动
while (t--){
//移动每个小球
for (int i = 0; i < n; i++){
//边界
if (node[i].now == l && node[i].flag)
continue;
if (node[i].flag)
node[i].now++;
else if (!node[i].flag)
node[i].now--;}
for (int i = 0; i < n; i++)
//判断当前遍历小球是否和其他小球发生碰撞,或者到达边界
if (isMeet(node[i]))
node[i].flag = !node[i].flag;}
for (int i = 0; i < n; i++){
if (i != 0)printf(" ");printf("%d", node[i].now);}
return 0;}
//201803-2
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x;
// true向右,false向左
bool flag;};
int main(){
int n, l, t;scanf("%d%d%d", &n, &l, &t);
vector<Node> v;
while (n--){
Node cur;
cur.flag = true;scanf("%d", &cur.x);
v.emplace_back(cur);}while (t--){
for (int i = 0; i < v.size(); i++)
if (v[i].flag){
v[i].x++;
if (v[i].x == l)
v[i].flag = !v[i].flag;}else{
v[i].x--;
if (v[i].x == 0)
v[i].flag = !v[i].flag;}
for (int i = 0; i < v.size(); i++)
for (int j = i + 1; j < v.size(); j++)
if (v[i].x == v[j].x)
v[i].flag = !v[i].flag, v[j].flag = !v[j].flag;}
for (auto it:v)printf("%d ", it);
return 0;}
//201803-1//模拟#include <bits/stdc++.h>using namespace std;int main() { int num; int temp = 0; int totalScore = 0; for (int i = 0; i < 31; i++) { scanf("%d", &am...