社区讨论
我已急哭。(ABC D题)
学术版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mlmd9v53
- 此快照首次捕获于
- 2026/02/14 21:43 5 天前
- 此快照最后确认于
- 2026/02/18 16:10 昨天

求调,到底为啥啊,代码很简洁,绝对能看懂
CPP#include <bits/stdc++.h>
using namespace std;
const int MAXN=200010;
int H,W,n,h[MAXN],w[MAXN],x[MAXN],y[MAXN],cnt;
unordered_map<int,int> mp;
vector<int> hind[MAXN],wind[MAXN];
bool used[MAXN];
int nx=1,ny=1,yh,yw;
void dh(){
for(int i=0;i<hind[mp[H]].size();i++){
int tmp=hind[mp[H]][i];
if(!used[tmp]){
W-=w[tmp];
x[tmp]=nx,y[tmp]=ny;
ny+=w[tmp];
used[tmp]=1;
}
}
}
void dw(){
for(int i=0;i<wind[mp[W]].size();i++){
int tmp=wind[mp[W]][i];
if(!used[tmp]){
H-=h[tmp];
x[tmp]=nx,y[tmp]=ny;
nx+=h[tmp];
used[tmp]=1;
}
}
}
signed main(){
cin>>H>>W>>n;
for(int i=1;i<=n;i++){
cin>>h[i]>>w[i];
if(mp.find(h[i])==mp.end()){
cnt++;
mp[h[i]]=cnt;
}
if(mp.find(w[i])==mp.end()){
cnt++;
mp[w[i]]=cnt;
}
hind[mp[h[i]]].push_back(i);
wind[mp[w[i]]].push_back(i);
}
while(H>0 && W>0){
if((H>0 && W>0) && mp.find(H)!=mp.end()) dh();
if((H>0 && W>0) && mp.find(W)!=mp.end()) dw();
}
for(int i=1;i<=n;i++){
cout<<x[i]<<' '<<y[i]<<endl;
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...