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
小明正在玩一个“翻硬币”的游戏。

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

每日一练社区's avatar
每日一练社区 已提交
9
比如,可能情形是:`**oo***oooo`
每日一练社区's avatar
每日一练社区 已提交
10

每日一练社区's avatar
每日一练社区 已提交
11
如果同时翻转左边的两个硬币,则变为:`oooo***oooo`
每日一练社区's avatar
每日一练社区 已提交
12 13 14 15 16

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

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

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****
```
每日一练社区's avatar
每日一练社区 已提交
31

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

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

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

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

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

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

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

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

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

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

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

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

```

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

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

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

F
fix bug  
feilong 已提交
92

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

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

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

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

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

int main()
{

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

        bfs();
    }

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

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

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

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

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

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