solution.md 3.4 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 翻硬币
F
fix bug  
feilong 已提交
2

3
**问题描述**
F
fix bug  
feilong 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10 11 12 13 14 15 16
小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:```**oo***oooo```

如果同时翻转左边的两个硬币,则变为:```oooo***oooo```

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

17
**输入格式**
F
fix bug  
feilong 已提交
18

每日一练社区's avatar
每日一练社区 已提交
19 20
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

21
**输出格式**
F
fix bug  
feilong 已提交
22

每日一练社区's avatar
每日一练社区 已提交
23 24
一个整数,表示最小操作步数。

25
**样例输入1**
F
fix bug  
feilong 已提交
26

每日一练社区's avatar
每日一练社区 已提交
27
```
每日一练社区's avatar
每日一练社区 已提交
28

每日一练社区's avatar
每日一练社区 已提交
29 30 31
**********
o****o****
```
每日一练社区's avatar
每日一练社区 已提交
32

33
**样例输出1**
F
fix bug  
feilong 已提交
34

每日一练社区's avatar
每日一练社区 已提交
35 36 37
```
5
```
每日一练社区's avatar
每日一练社区 已提交
38

39
**样例输入2**
F
fix bug  
feilong 已提交
40

每日一练社区's avatar
每日一练社区 已提交
41 42 43 44
```
*o**o***o***
*o***o**o***
```
每日一练社区's avatar
每日一练社区 已提交
45

46
**样例输出2**
F
fix bug  
feilong 已提交
47

每日一练社区's avatar
每日一练社区 已提交
48 49 50 51
```
1
```

每日一练社区's avatar
每日一练社区 已提交
52
以下选项<span style="color:red">错误</span>的是?
每日一练社区's avatar
每日一练社区 已提交
53

每日一练社区's avatar
每日一练社区 已提交
54
## aop
F
fix bug  
feilong 已提交
55

每日一练社区's avatar
每日一练社区 已提交
56
### before
F
fix bug  
feilong 已提交
57

每日一练社区's avatar
每日一练社区 已提交
58 59 60 61
```cpp
#include <bits/stdc++.h>
using namespace std;
```
每日一练社区's avatar
每日一练社区 已提交
62

每日一练社区's avatar
每日一练社区 已提交
63
### after
F
fix bug  
feilong 已提交
64

每日一练社区's avatar
每日一练社区 已提交
65 66 67 68 69
```cpp

```

## 答案
F
fix bug  
feilong 已提交
70

每日一练社区's avatar
每日一练社区 已提交
71
```cpp
每日一练社区's avatar
每日一练社区 已提交
72 73 74
char a[1005], b[1005];
int len, i = 0, ans = 0;

每日一练社区's avatar
每日一练社区 已提交
75 76
int main()
{
每日一练社区's avatar
每日一练社区 已提交
77 78 79
    scanf("%s%s", a, b);
    len = strlen(a);
    while (i < len)
每日一练社区's avatar
每日一练社区 已提交
80
    {
每日一练社区's avatar
每日一练社区 已提交
81
        if (a[i] != b[i])
每日一练社区's avatar
每日一练社区 已提交
82
        {
每日一练社区's avatar
每日一练社区 已提交
83 84
            a[i + 1] = (a[i + 1] == '*' ? '*' : 'o');
            ++ans;
每日一练社区's avatar
每日一练社区 已提交
85
        }
每日一练社区's avatar
每日一练社区 已提交
86
        ++i;
每日一练社区's avatar
每日一练社区 已提交
87
    }
每日一练社区's avatar
每日一练社区 已提交
88
    printf("%d\n", ans);
每日一练社区's avatar
每日一练社区 已提交
89 90 91 92
}
```
## 选项

F
fix bug  
feilong 已提交
93

每日一练社区's avatar
每日一练社区 已提交
94
### A
F
fix bug  
feilong 已提交
95

每日一练社区's avatar
每日一练社区 已提交
96
```cpp
每日一练社区's avatar
每日一练社区 已提交
97 98 99
char a[1005], b[1005];

struct node
每日一练社区's avatar
每日一练社区 已提交
100
{
每日一练社区's avatar
每日一练社区 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113
    char ff[1005];
    int step;
};

void bfs()
{

    queue<node> q;
    node ll;
    strcpy(ll.ff, a);
    ll.step = 0;
    q.push(ll);
    while (!q.empty())
每日一练社区's avatar
每日一练社区 已提交
114
    {
每日一练社区's avatar
每日一练社区 已提交
115 116 117 118
        node tmp;
        tmp = q.front();
        q.pop();
        if (!strcmp(tmp.ff, b))
每日一练社区's avatar
每日一练社区 已提交
119
        {
每日一练社区's avatar
每日一练社区 已提交
120 121 122
            printf("%d\n", tmp.step);

            return;
每日一练社区's avatar
每日一练社区 已提交
123
        }
每日一练社区's avatar
每日一练社区 已提交
124 125
        int num = strlen(tmp.ff);
        for (int i = 0; i < num - 1; i++)
每日一练社区's avatar
每日一练社区 已提交
126
        {
每日一练社区's avatar
每日一练社区 已提交
127 128 129 130 131
            node now;
            now = tmp;
            now.step++;
            if (now.ff[i] == '*')
                now.ff[i] = 'o';
每日一练社区's avatar
每日一练社区 已提交
132
            else
每日一练社区's avatar
每日一练社区 已提交
133 134 135 136 137 138 139
                now.ff[i] = '*';
            if (now.ff[i + 1] == '*')
                now.ff[i + 1] = 'o';
            else
                now.ff[i + 1] = '*';

            q.push(now);
每日一练社区's avatar
每日一练社区 已提交
140 141
        }
    }
每日一练社区's avatar
每日一练社区 已提交
142 143 144 145 146 147 148 149 150 151 152 153
}

int main()
{

    while (~scanf("%s", a))
    {
        scanf("%s", b);

        bfs();
    }

每日一练社区's avatar
每日一练社区 已提交
154 155 156 157 158
    return 0;
}
```

### B
F
fix bug  
feilong 已提交
159

每日一练社区's avatar
每日一练社区 已提交
160 161 162
```cpp
int main()
{
每日一练社区's avatar
每日一练社区 已提交
163 164
    string a;
    string b;
每日一练社区's avatar
每日一练社区 已提交
165
    cin >> a >> b;
每日一练社区's avatar
每日一练社区 已提交
166 167
    int cnt = 0;
    for (int i = 0; i < a.length(); i++)
每日一练社区's avatar
每日一练社区 已提交
168
    {
每日一练社区's avatar
每日一练社区 已提交
169
        if (a[i] != b[i])
每日一练社区's avatar
每日一练社区 已提交
170 171
        {
            if (a[i] == '*')
每日一练社区's avatar
每日一练社区 已提交
172 173 174 175 176 177 178 179 180
            {
                a[i] = 'o';
            }
            else
            {
                a[i] = '*';
            }

            if (a[i + 1] == '*')
每日一练社区's avatar
每日一练社区 已提交
181 182 183 184 185 186 187
            {
                a[i + 1] = 'o';
            }
            else
            {
                a[i + 1] = '*';
            }
每日一练社区's avatar
每日一练社区 已提交
188
            cnt++;
每日一练社区's avatar
每日一练社区 已提交
189 190
        }
    }
每日一练社区's avatar
每日一练社区 已提交
191
    cout << cnt;
每日一练社区's avatar
每日一练社区 已提交
192 193 194 195 196
    return 0;
}
```

### C
F
fix bug  
feilong 已提交
197

每日一练社区's avatar
每日一练社区 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
```cpp
int main()
{
    string a, b;
    cin >> a >> b;
    int a1 = a.size(), b1 = b.size(), ans = 0;
    for (int i = 0; i < a1; i++)
    {
        if (a[i] == b[i])
        {
            continue;
        }
        else
        {
            ans++;
            a[i] = b[i];
每日一练社区's avatar
每日一练社区 已提交
214
            if (a[i + 1] == '*')
每日一练社区's avatar
每日一练社区 已提交
215
            {
每日一练社区's avatar
每日一练社区 已提交
216
                a[i + 1] = 'o';
每日一练社区's avatar
每日一练社区 已提交
217 218 219
            }
            else
            {
每日一练社区's avatar
每日一练社区 已提交
220
                a[i + 1] = '*';
每日一练社区's avatar
每日一练社区 已提交
221 222 223 224 225 226 227
            }
        }
    }
    cout << ans << endl;
    return 0;
}
```