求优化刚刚比赛结束的A题
  • 板块学术版
  • 楼主Fwio_
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/1 13:02
  • 上次更新2024/1/1 16:56:23
查看原帖
求优化刚刚比赛结束的A题
965238
Fwio_楼主2024/1/1 13:02

我当模拟写的,拿到了前两个sub的分,但是后面的点不知道怎么优化

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n , m;
const int N = 1010;
int a[N][N];
int t[N][N];
int ans;
void g(int x){
	if(x == 0){
		for(int j = 1;j <= n;j++){
			for(int i = n;i;i--){
				if(a[i][j] == 1){
					int f = i;
					while(f < n){
						if(a[f + 1][j] == 0){
							swap(a[f][j] , a[f + 1][j]);
						}
						f++;
					} 
				}
			}
		}
	}
	else{
		for(int i = n;i;i--){
			if(a[i][x] == 1){
				int f = i;
				while(f < n){
					if(a[f + 1][x] == 0){
						swap(a[f][x] , a[f + 1][x]);
					}
					f++;
				} 
			}
		}
	}
}
void left(){
	int j = 1;
	for(int x = 1;x <= n;x++){
		for(int y = n , i = 1;y && i <= n;y-- , i++){
			t[i][j] = a[x][y];
		}
		j++;
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			a[i][j] = t[i][j];
		}
	}
}
void right(){
	int j = 1;
	for(int x = n;x;x--){
		for(int y = 1 , i = 1;y <= n && i <= n;y++ , i++){
			t[i][j] = a[x][y];
		}
		j++;
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			a[i][j] = t[i][j];
		}
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			char x;
			cin >> x;
			a[i][j] = x ^ 48;
		}
	}
	g(0);
	while(m--){
		char opt;
		int x , y;
		cin >> opt;
		scanf("%d%d" , &x , &y);
		if(opt == 'L') left();
		else if(opt == 'R') right();
		g(0);
		if(a[x][y] == 0) ++ans;
		else{
			a[x][y] = 0;
			g(y);
		}
	}
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= n;j++){
			cout << a[i][j];
		}
		cout << endl;
	}
	cout << ans << endl;
	return 0;
}
2024/1/1 13:02
加载中...