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 28 29 30
```
**********
o****o****
```
31
**样例输出1**
F
fix bug  
feilong 已提交
32

每日一练社区's avatar
每日一练社区 已提交
33 34 35
```
5
```
36
**样例输入2**
F
fix bug  
feilong 已提交
37

每日一练社区's avatar
每日一练社区 已提交
38 39 40 41
```
*o**o***o***
*o***o**o***
```
42
**样例输出2**
F
fix bug  
feilong 已提交
43

每日一练社区's avatar
每日一练社区 已提交
44 45 46 47
```
1
```

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

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

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

每日一练社区's avatar
每日一练社区 已提交
54 55 56 57 58
```cpp
#include <bits/stdc++.h>
using namespace std;
```
### after
F
fix bug  
feilong 已提交
59

每日一练社区's avatar
每日一练社区 已提交
60 61 62 63 64
```cpp

```

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

每日一练社区's avatar
每日一练社区 已提交
66
```cpp
每日一练社区's avatar
每日一练社区 已提交
67 68 69
char a[1005], b[1005];
int len, i = 0, ans = 0;

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

F
fix bug  
feilong 已提交
88

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

每日一练社区's avatar
每日一练社区 已提交
91
```cpp
每日一练社区's avatar
每日一练社区 已提交
92 93 94
char a[1005], b[1005];

struct node
每日一练社区's avatar
每日一练社区 已提交
95
{
每日一练社区's avatar
每日一练社区 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108
    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
每日一练社区 已提交
109
    {
每日一练社区's avatar
每日一练社区 已提交
110 111 112 113
        node tmp;
        tmp = q.front();
        q.pop();
        if (!strcmp(tmp.ff, b))
每日一练社区's avatar
每日一练社区 已提交
114
        {
每日一练社区's avatar
每日一练社区 已提交
115 116 117
            printf("%d\n", tmp.step);

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

            q.push(now);
每日一练社区's avatar
每日一练社区 已提交
135 136
        }
    }
每日一练社区's avatar
每日一练社区 已提交
137 138 139 140 141 142 143 144 145 146 147 148
}

int main()
{

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

        bfs();
    }

每日一练社区's avatar
每日一练社区 已提交
149 150 151 152 153
    return 0;
}
```

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

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

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

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

每日一练社区's avatar
每日一练社区 已提交
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
```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
每日一练社区 已提交
209
            if (a[i + 1] == '*')
每日一练社区's avatar
每日一练社区 已提交
210
            {
每日一练社区's avatar
每日一练社区 已提交
211
                a[i + 1] = 'o';
每日一练社区's avatar
每日一练社区 已提交
212 213 214
            }
            else
            {
每日一练社区's avatar
每日一练社区 已提交
215
                a[i + 1] = '*';
每日一练社区's avatar
每日一练社区 已提交
216 217 218 219 220 221 222
            }
        }
    }
    cout << ans << endl;
    return 0;
}
```