比赛 国庆欢乐赛3 评测结果 C
题目名称 Following Directions 最终得分 0
用户昵称 29 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2025-10-05 11:31:51
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct ys{
    int c=0,zi=0,zj=0;
    vector<int> fi,fj;
}mp[1503][1503];
int n,q,a,b;
char cr;
long long ans=0;
int zl(int i,int j,int cl){
    ans+=cl-mp[i][j].c;
    mp[i][j].c=cl;
    for(int l=0;l<=mp[i][j].fi.size();l++){
        if(mp[i][j].fi[l]+mp[i][j].fj[l]==0) return 0;
        zl(i+mp[i][j].fi[l],j+mp[i][j].fj[l],cl);
    }
    return 0;
}
//int zl1(int i,int j,int cl){
//    
//    mp[i][j].c=cl;
//    if(mp[i][j].fi+mp[i][j].fj==0) return 0;
//    zl1(i+mp[i][j].fi,j+mp[i][j].fj,cl);
//    if(mp[i][j].nfi+mp[i][j].nfj==0) return 0;
//    zl1(i+mp[i][j].nfi,j+mp[i][j].nfj,cl);
//    return 0;
//} 
int main(){
    freopen("zunxun.in","r",stdin);
    freopen("zunxun.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){  
            cin>>cr;
            if(cr=='R'){
                mp[i][j].zi=0;
                mp[i][j].zj=1;
                mp[i][j+1].fi.push_back(0);
                mp[i][j+1].fj.push_back(-1);
            } 
            if(cr=='D'){
                mp[i][j].zi=1;
                mp[i][j].zj=0;
                mp[i+1][j].fi.push_back(-1);
                mp[i+1][j].fj.push_back(0);
            } 
        }
        cin>>mp[i][n+1].c;
    }
    for(int i=1;i<=n;i++){
        cin>>mp[n+1][i].c;
    }
    cin>>q;
    for(int i=1;i<=n;i++){
        zl(n+1,i,mp[n+1][i].c);
    }
    for(int i=1;i<=n;i++){
        zl(i,n+1,mp[i][n+1].c);
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            ans+=mp[i][j].c;
    cout<<ans<<endl;   
    for(int i=1;i<=q;i++){
        cin>>a>>b;
        if(mp[a][b].zi==0&&mp[a][b].zj==1) {//向右 ->向下 
            mp[a][b].zi=1;
            mp[a][b].zj=0;
            for(int j=0;j<mp[a][b+1].fi.size();j++){
                if(mp[a][b+1].fi[j]==0&&mp[a][b+1].fj[j]==-1){
                    mp[a][b+1].fi[j]=0;
                    mp[a][b+1].fj[j]=0;
                } 
            }
            if(mp[a+1][b].fi.size()<2){
               mp[a+1][b].fi.push_back(-1);
               mp[a+1][b].fj.push_back(0); 
            }
            else{
                if(mp[a+1][b].fi[0]==0&&mp[a+1][b].fj[0]==0) {
                    mp[a+1][b].fi[0]=-1;
                    mp[a+1][b].fj[0]=0;
                }
                else{
                    mp[a+1][b].fi[1]=-1;
                    mp[a+1][b].fj[1]=0;
                }
            }
            zl(a,b,mp[a+1][b].c);
        }
        if(mp[a][b].zi==0&&mp[a][b].zj==1) {//向xia ->向you 
            mp[a][b].zi=0;
            mp[a][b].zj=1;
            for(int j=0;j<mp[a+1][b].fi.size();j++){
                if(mp[a+1][b].fi[j]==-1&&mp[a][b+1].fj[j]==0){
                    mp[a+1][b].fi[j]=0;
                    mp[a+1][b].fj[j]=0;
                } 
            }
            if(mp[a][b+1].fi.size()<2){
               mp[a][b+1].fi.push_back(0);
               mp[a][b+1].fj.push_back(-1); 
            }
            else{
                if(mp[a][b+1].fi[0]==0&&mp[a][b+1].fj[0]==0) {
                    mp[a][b+1].fi[0]=0;
                    mp[a][b+1].fj[0]=-1;
                }
                else{
                    mp[a][b+1].fi[1]=0;
                    mp[a][b+1].fj[1]=-1;
                }
            }
            zl(a,b,mp[a][b+1].c);
        }
        cout<<ans<<endl;
    }    
    return 0;       
}

  //
//    for(int i=1;i<=n+1;i++){
//        for(int j=1;j<=n+1;j++) cout<<mp[i][j].fi <<","<<mp[i][j].fj<<"  ";
//        cout<<endl;
//    }
//     for(int i=1;i<=n+1;i++){
//        for(int j=1;j<=n+1;j++) cout<<mp[i][j].c<<"  ";
//       cout<<endl;
//    

//    for(int i=1;i<=n+1;i++){
//        for(int j=1;j<=n+1;j++) cout<<mp[i][j].c<<"  ";
//        cout<<endl;
//    }