记录编号 607114 评测结果 AAAAAAAAAAAAAAA
题目名称 3863.[USACO23 Jan Silver] Following Directions 最终得分 100
用户昵称 Gravatar徐诗畅 是否通过 通过
代码语言 C++ 运行时间 0.707 s
提交时间 2025-10-05 17:09:53 内存使用 16.09 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1505;
int n,a[N][N],b[N][N],ans;
char grid[N][N];
bool v[N][N];
int x,y;
int main(){
    freopen("zunxun.in","r",stdin);
    freopen("zunxun.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        char s[N];
        scanf("%s",s);
        for(int j=1;j<=n;j++){
            grid[i][j]=s[j-1];
            v[i][j]=(s[j-1]=='R');
        }
        scanf("%d",&a[i][n+1]);
    }
    for(int i=1;i<=n;i++){
        scanf("%d",&a[n+1][i]);
    }
    for(int i=1;i<=n;i++){
        a[n+1][i] = a[n+1][i];
        a[i][n+1] = a[i][n+1];
    }
    for(int i=n;i>=1;i--){
        for(int j=n;j>=1;j--){
            if(v[i][j]){
                a[i][j]=a[i][j+1];
            }else{
                a[i][j]=a[i+1][j];
            }
            ans+=a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            b[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(b[i][j]>0){
                if(v[i][j]){
                    b[i][j+1]+=b[i][j];
                }else{
                    b[i+1][j]+=b[i][j];
                }
            }
        }
    }
    printf("%d\n",ans);
    int q;
    scanf("%d",&q);
    while(q--){
        scanf("%d%d",&x,&y);
        int tx=x,ty=y;
        while(tx<=n&&ty<=n){
            if(v[tx][ty]){
                b[tx][ty+1]-=b[x][y];
                ty++;
            }else{
                b[tx+1][ty]-=b[x][y];
                tx++;
            }
        }
        ans-=b[x][y]*a[tx][ty];
        v[x][y]=!v[x][y];
        tx=x,ty=y;
        while(tx<=n&&ty<=n){
            if(v[tx][ty]){
                b[tx][ty+1]+=b[x][y];
                ty++;
            }else{
                b[tx+1][ty]+=b[x][y];
                tx++;
            }
        }
        ans+=b[x][y]*a[tx][ty];
        printf("%d\n",ans);
    }
    return 0;
}