记录编号 607077 评测结果 AAAAAAAAAAAAAAA
题目名称 3863.[USACO23 Jan Silver] Following Directions 最终得分 100
用户昵称 Gravatar汐汐很希希 是否通过 通过
代码语言 C++ 运行时间 1.806 s
提交时间 2025-10-05 15:02:44 内存使用 18.54 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
#define L(i, a, b) for(int i = a; i <= b; i++)
#define R(i, a, b) for(int i = a; i >= b; i--)
using namespace std;
const int N = 1510;
int n, q, c[N][N], v[N][N], f[N][N];
ll ans;
int Upd(int x, int y, int v){//暴力修改f数组
	if(x == n + 1 || y == n + 1) return v * c[x][y];
	f[x][y] += v;
	if(!c[x][y]) return Upd(x, y + 1, v);
	else return Upd(x + 1, y, v);
}
int main(){
    freopen("zunxun.in","r",stdin);
    freopen("zunxun.out","w",stdout);
    
	scanf("%d", &n);
	L(i, 1, n){
		L(j, 1, n){
			char ch; scanf(" %c", &ch);
			c[i][j] = (ch == 'D'); 
		}
		scanf("%d", &c[i][n + 1]);
	} 
	L(i, 1, n) scanf("%d", &c[n + 1][i]);
	L(i, 1, n){
		L(j, 1, n){
			f[i][j]++;
			if(!c[i][j]) f[i][j + 1] += f[i][j];
			else f[i + 1][j] += f[i][j];
		}
	}
	R(i, n, 1){
		R(j, n, 1){
			if(!c[i][j]) v[i][j] = (j == n? c[i][j + 1] : v[i][j + 1]);
			else v[i][j] = (i == n? c[i + 1][j] : v[i + 1][j]);
			ans += v[i][j];
		}
	}
	printf("%lld\n", ans);
	scanf("%d", &q);
	L(i, 1, q){
		int x, y;
		scanf("%d%d", &x, &y);
		if(!c[x][y]){
			c[x][y] = 1;
			ans = ans + Upd(x + 1, y, f[x][y]) + Upd(x, y + 1, -f[x][y]);
		}
		else{
			c[x][y] = 0;
			ans = ans + Upd(x, y + 1, f[x][y]) + Upd(x + 1, y, -f[x][y]);
		}
		printf("%lld\n", ans);
	}
	return 0;
}