社区讨论

我已急哭。(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 条回复,欢迎继续交流。

正在加载回复...