暴力做法,O(q(n+m)T7~10被挂
查看原帖
暴力做法,O(q(n+m)T7~10被挂
906970
Jerry_Money楼主2025/1/23 14:15
#include<bits/stdc++.h>
#define PII pair<int,int>
#define mp(i,j) ((i-1)*m+j)
#define int long long
#define getn(i,j) ((i-1)*m+j)
using namespace std;
int n,m;
unordered_map<int, int>c;
int getnum(int x,int y){
	if(c[mp(x,y)])return c[mp(x,y)];
	else return c[mp(x,y)]=getn(x,y);
}
void movenum(int x,int y,int k){
	c[mp(x,y)]=k;
}
int tot;
int a[1086][1086];
int Q;
void solve(){
	int tot=0;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=++tot;
	int bk;
	while(Q--){
		int x,y;
		cin>>x>>y;
		bk=a[x][y];
		cout<<bk<<"\n";
		for(int j=y;j<m;j++)a[x][j]=a[x][j+1];
		for(int i=x;i<n;i++)a[i][m]=a[i+1][m];
		a[n][m]=bk;
	}
	exit(0);
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	cin>>Q;
	if(n==1)
		solve();
	int x,y;
	int bk;
	while(Q--){
		cin>>x>>y;
		bk=getnum(x,y);
		cout<<bk<<"\n";
		for(int j=y;j<m;j++){
			movenum(x,j,getnum(x,j+1));
		}
		for(int i=x;i<n;i++){
			movenum(i,m,getnum(i+1,m));
		}
		movenum(n,m,bk);
	}
}
2025/1/23 14:15
加载中...