1 条题解

  • 3
    @ 2024-5-26 11:50:05
    #include<iostream>
    using namespace std;
    int main()
    {
        int n, flag=0, swap_cnt=0;
        cin>>n;
        string str;
        cin>>str;
        for(int i=0; i<n-1; i++)
    	{
            for(int j=n-1; j>=i; j--) //从右往左进行匹配
    		{
                if(j==i)  //没有匹配的字母
    			{
                    if(flag==1||str.size()%2==0)
    				{
                        cout<<"Impossible"<<endl;
                        return 0;
                    }
                    flag=1;
                    swap_cnt+=str.size()/2-i; //计算单个字母的交换次数
                }
    			else if(str[i]==str[j])  //匹配到位置时
    			{
                    for(int k=j; k<n-1; k++)
    				{
                        swap(str[k], str[k+1]); //将位置进行交换
                        swap_cnt++;  //累计交换次数
                    }
                    n--;  //每搜索完一次后,相应匹配的字母放在最右边。下次搜索从n-1的位置,从右往左匹配。
                    break; 
                }
            }   
        }
        cout<<swap_cnt<<endl;
        return 0;
    }
    

    已AC,点个赞啊

    • 1

    信息

    ID
    838
    时间
    1000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    22
    已通过
    16
    上传者