蚂蚁相遇:模拟交换位置
蚂蚁相遇:模拟交换位置
蚂蚁的移动一般会排成一排,当两排蚂蚁在一个狭窄的道路相遇是,它们两排无法直接通过的,在这种情况下它们会给对方发送信号,每隔 1 秒,左边的一排蚂蚁从另一方头顶跨过去,这样两只蚂蚁直接相互交换位置。例如左边的一排蚂蚁的顺序用 'ABC' 表示,右边的一排蚂蚁用 'DEF' 表示,最开始相遇是这样的状态: 'CBADEF',第一秒:'CBDAEF',第二秒:'CDBEAF',… ,依次类推。
给定一个秒数 T ,请输出 T 秒后蚂蚁队列的顺序。
输入描述
第一行包含两个整数 N1 和 N2(1≤N1,N2≤105),分别表示第一排和第二排蚂蚁的数量。
接下来的两行包含两个字符串,分别表示两排蚂蚁的顺序,注意:当蚂蚁相遇时,第一排的蚂蚁在左侧,第二排蚂蚁在右侧,且第一排蚂蚁的顺序应该反着看。
输入的最后一行包含整数 T ( T≤50)。
输出描述
输出 T 秒后蚂蚁的顺序。
用例输入 1
3 3 ABC DEF 0
用例输出 1
CBADEF
用例输入 2
3 3 ABC DEF 2
用例输出 2
CDBEAF
代码 (cpp)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int N1, N2;
cin >> N1 >> N2;
string ants1, ants2;
cin >> ants1 >> ants2;
reverse(ants1.begin(), ants1.end());
int T;
cin >> T;
while (T--) {
bool flag = false;
for (int i = 0; i < min(N1, N2); i++) {
if (ants1[i] < ants2[i]) {
swap(ants1[i], ants2[i]);
flag = true;
}
}
if (!flag) break;
}
reverse(ants1.begin(), ants1.end());
cout << ants1 + ants2 << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/qvoQ 著作权归作者所有。请勿转载和采集!