比赛 国庆欢乐赛3 评测结果 AWWWTTTTTTTTTTT
题目名称 Following Directions 最终得分 7
用户昵称 梦那边的没好TM 运行时间 31.694 s
代码语言 C++ 内存使用 22.58 MiB
提交时间 2025-10-05 10:24:33
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define foru(a,b,c) for(ll a=b;a<=c;a++)

ll n,cow[1505][1505],num[1505][1505],sum,q;

void fvck(ll x,ll y){
    while(x!=n+1&&y!=n+1){
        if(cow[x][y]){
            num[x][y+1]=num[x][y]+1;
            y++;
        }else{
            num[x+1][y]=num[x][y]+1;
            x++;
        }
    }
}

int main(){
    freopen("zunxun.in","r",stdin);
    freopen("zunxun.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n;
    char c;
    foru(i,1,n+1){
        foru(j,1,n+1){
            if(i!=n+1&&j!=n+1){
                cin>>c;//D->0 R->1
                cow[i][j]=c/2%2;
            }else if(i==n+1&&j==n+1){
                continue;
            }else{
                cin>>cow[i][j];
            }
        }
    }
//    foru(i,1,n+1){
//        foru(j,1,n+1){
//            cerr<<cow[i][j]<<" ";
//        }
//        cerr<<endl;
//    }
//    cin>>q;
//    foru(i,1,q){
//        ll x,y;
//        cin>>x>>y;
//        p[i]={x,y};
//    }
    foru(i,1,n){
        foru(j,1,n){
            if(!num[i][j]){
                num[i][j]=1;
                fvck(i,j);
            }
        }
    }
    foru(i,1,n){
        if(!num[n+1][i])num[n+1][i]++;
        sum+=(num[n+1][i]-1)*cow[n+1][i];
    }
    foru(i,1,n){
        if(!num[i][n+1])num[i][n+1]++;
        sum+=(num[i][n+1]-1)*cow[i][n+1];
    }
    cout<<sum<<endl;
    
    cin>>q;
    foru(kkk,1,q){
        foru(i,1,n+1){
            foru(j,1,n+1){
                num[i][j]=0;
            }
        }
        ll x,y;
        sum=0;
        cin>>x>>y;
        cow[x][y]=!cow[x][y];
        foru(i,1,n){
            foru(j,1,n){
                if(!num[i][j]){
                    num[i][j]=1;
                    fvck(i,j);
                }
            }
        }
        foru(i,1,n){
            if(!num[n+1][i])num[n+1][i]++;
            sum+=(num[n+1][i]-1)*cow[n+1][i];
        }
        foru(i,1,n){
            if(!num[i][n+1])num[i][n+1]++;
            sum+=(num[i][n+1]-1)*cow[i][n+1];
        }
        cout<<sum<<endl;
    }
    return 0;
}