蚂蚁相遇:模拟交换位置

蚂蚁的移动一般会排成一排,当两排蚂蚁在一个狭窄的道路相遇是,它们两排无法直接通过的,在这种情况下它们会给对方发送信号,每隔 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录