显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,c,mp[1600][1600],vis[1600][1600];
char s[1600];
ll Q;
ll ans;
ll fax[1600][1600],fay[1600][1600];
int main(){
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
freopen("zunxun.in","r",stdin);
freopen("zunxun.out","w",stdout);
cin>>n;
for (int i=0;i<n;i++){
cin>>s>>c;
mp[i][n]=c;
for (int j=0;j<n;j++){
if (s[j]=='R'){
mp[i][j]=1;
fax[i][j]=i;
fay[i][j]=j+1;
}
else{
mp[i][j]=0;
fax[i][j]=i+1;
fay[i][j]=j;
}
}
}
for (int i=0;i<n;i++){
cin>>mp[n][i];
}
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
vis[i][j]++;
vis[fax[i][j]][fay[i][j]]+=vis[i][j];
}
}
for (int i=0;i<n;i++){
ans+=vis[i][n]*mp[i][n]+vis[n][i]*mp[n][i];
}
cout<<ans<<endl;
cin>>Q;
while (Q--){
int a,b,x,y;
cin>>a>>b;a--;b--;
x=a;y=b;
while (x!=n&&y!=n){
if (mp[x][y]){
y++;
vis[x][y]-=vis[a][b];
}else{
x++;
vis[x][y]-=vis[a][b];
}
}
ans-=vis[a][b]*mp[x][y];
if (mp[a][b]) mp[a][b]=0;
else mp[a][b]=1;
x=a;y=b;
while (x!=n&&y!=n){
if (mp[x][y]){
y++;
vis[x][y]+=vis[a][b];
}else{
x++;
vis[x][y]+=vis[a][b];
}
}
ans+=vis[a][b]*mp[x][y];
printf("%lld\n",ans);
}
return 0;
}