2024HNCPC G - Utakotoba

ACM算法C++代码分享

直接贴码了,注释可能有误,欢迎指出

#include<bits/stdc++.h>
using namespace std;


/*
注意到操作过程其实是可逆的
swap有一种方法就是x=x^y y = x^y x = x^y,灵感来源?
所以说其实a,b数组是由基向量生成出来的,如果a数组可以变成b数组,那么他们的基向量得是等价的,既然是等价的必然可以相互转化
所以有了构造思路就是把数组变成同一组0000+基向量的形式
那么答案就是a变成基的正向过程+b变成基的逆向过程

details: 
(1)对两个不同位置的数操作其实就是把一个数swap到另一个数旁边异或一下,再swap回去
*/
int n;
inline void solve(){
   
   
    cin>>n;
    vector<int>c(n+1),b(n+1);
    for(int i = 1;i<=n;++i) cin>>b[i];
    for(int i = 1;i<=n;++i) cin>>c[i];
    auto get=[&](vector<int> &a)->vector<pair<int,int>>{
   
   
        vector<int> base(20),pos(20,-1),ff(n+1,-1);//基,基的位置,位置的基(逆映射)
        vector<pair<int,int>> op;
        auto swp=[&](int x,int y)->void{
   
   
            op.push_back({
   
   x,y});
            op.push_back({
   
   y,x});
            op.push_back({
   
   x,y});
        };
        auto insert=[&](int x,int po)->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值