显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,ans,q,x,y,i,j;
char c;
int sign[1514][1514],cow[1514][1514];
void cx(int x,int y){
int i,j;
if(x>n||y>n)return;
cow[x][y]++;
if(sign[x][y]==1)cow[x][y+1]=cow[x][y+1]+cow[x][y];
else cow[x+1][y]=cow[x+1][y]+cow[x][y];
return;
}
int solve(){
ans=0;
for(int i=1;i<=n;i++){
ans=ans+sign[n+1][i]*cow[n+1][i];
ans=ans+sign[i][n+1]*cow[i][n+1];
}
return ans;
}
void dfs(int x,int y,int z){
if(x>n||y>n)return;
if(sign[x][y]==1){
cow[x][y+1]=cow[x][y+1]+z;
dfs(x,y+1,z);
}
else{
cow[x+1][y]=cow[x+1][y]+z;
dfs(x+1,y,z);
}
return;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
freopen("zunxun.in","r",stdin);freopen("zunxun.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cin>>c;
if(c=='R')sign[i][j]=1;
else sign[i][j]=2;
}
cin>>sign[i][n+1];
}
for(i=1;i<=n;i++){
cin>>sign[n+1][i];
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cx(i,j);
}
}
cout<<solve()<<endl;
cin>>q;
while(q--){
cin>>x>>y;
if(sign[x][y]==1){
cow[x][y+1]=cow[x][y+1]-cow[x][y];
dfs(x,y+1,-1*cow[x][y]);
sign[x][y]=2;
}
else{
cow[x+1][y]=cow[x+1][y]-cow[x][y];
dfs(x+1,y,-1*cow[x][y]);
sign[x][y]=1;
}
dfs(x,y,cow[x][y]);
cout<<solve()<<endl;
}
}