比赛 国庆欢乐赛3 评测结果 AWWWWWWTTTTTTTT
题目名称 Following Directions 最终得分 7
用户昵称 梦那边的美好ME 运行时间 20.219 s
代码语言 C++ 内存使用 23.91 MiB
提交时间 2025-10-05 10:25:22
显示代码纯文本
#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 row[1600],lin[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;
            else mp[i][j]=0;
        }
    }
    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++){
            if (vis[i][j]!=0) continue;
            vis[i][j]=1;
            int x=i,y=j;
            while (x!=n&&y!=n){
                if (mp[x][y]){
                    y++;
                    vis[x][y]=vis[x][y-1]+1;
                }
                else{
                    x++;
                    vis[x][y]=vis[x-1][y]+1;
                }
            }
            ans+=(vis[x][y]-1)*mp[x][y];
        }
    }
    printf("%lld\n",ans);
    scanf("%d",&Q);
    while (Q--){
        int a,b,x,y;
        scanf("%d %d",&a,&b);a--;b--;
        x=a;y=b;
        while (x!=n&y!=n){
            if (mp[x][y]){
                y++;
                vis[x][y]--;
            }else{
                x++;
                vis[x][y]--;
            }
        }
        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]++;
            }else{
                x++;
                vis[x][y]++;
            }
        }
        ans+=vis[a][b]*mp[x][y];
        printf("%lld\n",ans);
    } 
    return 0;
}