假如你有n张照片。有些照片正面朝上,而有些是反面朝上。你的任务是排序,使所有的照片朝向一致。唯一能做的操作是,从一堆照片的上面把需要翻转的照片挑出来放成一堆,把这堆照片翻转过来,放回到原来的那堆照片上。 程序输入为两行:第一行为一个整数,表示照片的张数,第二行表示照片的初始状态,U表示照片正面朝上,D表示照片反面朝上。 例如: 5 UUDUU 对上面的示例,先将最前面2张UU放在一边,遇到D,将UU翻转,放到原来的堆上面,成为DDDUU;将DDD放在一边,遇到U,将DDD翻转,放到原来的堆上面,成为UUU
时间: 2024-03-18 22:41:58 浏览: 212
这是一个经典的翻转硬币问题。可以使用贪心算法来解决。从左到右扫描每一张照片,如果这张照片与前一张照片的朝向不一致,则将它放到一边,直到扫描完所有的照片。然后将这一边的照片翻转过来,放回到原来的那堆照片上。重复这个过程,直到所有的照片朝向一致为止。
具体实现可以使用双端队列来模拟照片的堆,用一个变量记录当前照片的朝向。代码如下:
```
#include <iostream>
#include <deque>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
deque<char> photos;
int dir = (s[0] == 'U' ? 1 : -1); // 当前照片的朝向
for (int i = 0; i < n; i++) {
if (s[i] == (dir == 1 ? 'D' : 'U')) { // 需要翻转
while (!photos.empty()) {
char c = photos.back();
photos.pop_back();
s[i] = (c == 'U' ? 'D' : 'U');
photos.push_front(s[i]);
}
dir = -dir; // 翻转后朝向相反
}
photos.push_back(s[i]);
}
cout << s << endl;
return 0;
}
```
时间复杂度为O(n),空间复杂度为O(n)。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)