제출 #1309086

#제출 시각아이디문제언어결과실행 시간메모리
1309086yusifmExam (eJOI20_exam)C++20
0 / 100
1 ms576 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...