题解:P7207 [COCI 2019/2020 #3] Sob
P7207
题目描述
两个集合
做法概括
令
令
做法正确性分析
为什么可以保证进行操作后的集合仍有解?
在操作后,假设拿掉了
由于题目说明了当
为什么在操作时可以进行顺序匹配?
在寻找
设
所以
又因为不会发生二进制退位的情况,即
若
因此这
为什么在
设
易发现:
令
若
若
故在
code
#include<bits/stdc++.h>
using namespace std;
int n,m;
stack<pair<int,int>>stk;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
int i=n-1,j=m,lastj=j;
while(j<=m+n-1){
if((j&i)!=i) j++;
else{
for(int v=j;v>=lastj;v--) stk.push({i--,v});
lastj=j+1;
j++;
}
}
while(!stk.empty()) cout<<stk.top().first<<" "<<stk.top().second<<"\n",stk.pop();
return 0;
}
upd:
2025/11/4: 修改了笔误。