#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define ll long long
#define str string
#define pb push_back
#define pf push_front
#define in insert
#define all(v) v.begin(),v.end()
const int sz=1000000,INF=10000000;
using namespace std;
ll n,m,num,cnt;
vector<ll>res,res1,res2,Res;
map<vector<ll>,pair<pair<ll,ll>,vector<ll>>>parent;
bool f(vector<ll>nums,ll num)
{
for(int i=0;i<nums.size()-1;i++)
{
if((num==1 && nums[i]>=nums[i+1]) || (num==2 && nums[i]>nums[i+1]))
{
return false;
}
}
return true;
}
vector<ll>F(ll num1,ll num2,vector<ll>nums)
{
vector<ll>res;
for(int i=0;i<nums.size();i++)
{
if(i==num1)
{
res.pb(nums[num1]^nums[num2]);
}
else
{
res.pb(nums[i]);
}
}
return res;
}
void bfs(vector<ll>nums,ll num)
{
queue<vector<ll>>numS;
numS.push(nums);
parent[nums]={{-1,-1},{}};
while(numS.size()!=0 && cnt<INF)
{
res=numS.front();
numS.pop();
if(f(res,num))
{
Res=res;
break;
}
else
{
for(int i=0;i<res.size();i++)
{
if(i==0)
{
res1=F(i,i+1,res);
if(parent.find(res1)==parent.end())
{
numS.push(res1),parent[res1]={{i+1,i+2},res};
cnt++;
}
}
else if(i==res.size()-1)
{
res2=F(i,i-1,res);
if(parent.find(res2)==parent.end())
{
numS.push(res2),parent[res2]={{i,i+1},res};
cnt++;
}
}
else
{
res1=F(i,i+1,res),res2=F(i,i-1,res);
if(parent.find(res1)==parent.end())
{
numS.push(res1);
parent[res1]={{i+1,i+2},res};
cnt++;
}
if(parent.find(res2)==parent.end())
{
numS.push(res2);
parent[res2]={{i,i+1},res};
cnt++;
}
}
}
}
}
}
void solve()
{
cin>>n>>m;
vector<ll>nums;
vector<pair<ll,ll>>ans;
for(int i=0;i<n;i++)
{
cin>>num;
nums.pb(num);
}
if(!is_sorted(all(nums)))
{
bfs(nums,m);
while(parent[Res].first!=make_pair(-1LL,-1LL))
{
ans.pb(parent[Res].first),Res=parent[Res].second;
}
reverse(all(ans));
}
cout<<ans.size()<<"\n";
for(int i=0;i<ans.size();i++)
{
cout<<ans[i].first<<" "<<ans[i].second<<"\n";
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
ll t=1;
//cin>>t;
while(t--)
{
solve();
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |