1 条题解

  • 0
    @ 2025-8-24 21:59:56

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar QianianXY
    www.qianianxy.cn

    搬运于2025-08-24 21:59:56,当前版本为作者最后更新于2019-09-20 13:11:18,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    一道纯模拟题。

    将两队合并为一个字符串,用一个数组记录蚂蚁的方向,左队为0,右队为1。每一个时间点,两个两个字符地扫一遍字符串。由于0只能往右走,1只能往左走,所以只要在当前的两个字符中,第一个是0,第二个是1,就执行交换(同时交换方向数组和字符串),并且扫描指针加2。否则指针加1。

    需要注意的是队伍合并时1左队顺序需要翻转。

    自我感觉讲得比较明白了, 下贴代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n1, n2, t, a[100005], len;
    string s1, s2, s3;
    int main()
    {
    	cin >> n1 >> n2 >> s1 >> s2 >> t;
    	for (int i = 0; i < s1.size() / 2; i++) swap(s1[i], s1[s1.size() - 1 - i]);
    	s3 = s1 + s2; len = s3.size();
    	for (int i = s1.size(); i < len; i++) a[i] = 1;
    	for (int i = 0; i < t; i++)
    	{
    		int j = 0;
    		while (j < len)
    		{
    			if (!a[j] && a[j + 1]) swap(a[j], a[j + 1]), swap(s3[j], s3[j + 1]), j += 2;
    			else j++;
    		}
    	}
    	cout << s3 << endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    3387
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者