记录编号 607071 评测结果 AAAAAAAAAAAAAAA
题目名称 3863.[USACO23 Jan Silver] Following Directions 最终得分 100
用户昵称 Gravatar梦那边的美好ME 是否通过 通过
代码语言 C++ 运行时间 1.294 s
提交时间 2025-10-05 14:47:29 内存使用 44.24 MiB
显示代码纯文本
#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;
}