社区讨论

暴力做法,O(q(n+m)T7~10被挂

P3960[NOIP 2017 提高组] 列队参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m68xx5xl
此快照首次捕获于
2025/01/23 14:16
去年
此快照最后确认于
2025/11/04 10:57
4 个月前
查看原帖
CPP
#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);
	}
}

回复

0 条回复,欢迎继续交流。

正在加载回复...