#54120: 有人可以幫我看嗎卡在80%


s310107@student2.ylsh.chc.edu. ... (Sunjoker)


#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second

int main(){
    int n,m,ans=0,lastans=0;
    vector<pair<int,int>> g ={{1,0},{0,-1},{-1,0},{0,1}};
    cin>>n>>m;
    int game[20][40];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>game[i][j];
     int a;
     while(true){
     for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(game[i][j]==-1) continue;
            for(int k=0;k<4;k++){
                    a=1;
                    while(true){
                    if(i+g[k].F<0||j+g[k].S<0||i+g[k].F>=n||j+g[k].S>=m) break;
                    if(game[i][j]==game[i+a*(g[k].F)][j+a*(g[k].S)]){
                        ans+=game[i][j];
                        game[i][j]=-1;
                        game[i+a*(g[k].F)][j+a*(g[k].S)]=-1;
                        break;
                    }
                    if(game[i+a*(g[k].F)][j+a*(g[k].S)]>=0) break;
                    a++;
                }
                if(game[i][j]==-1) break;
            }
        }
     }
     if(lastans==ans) break;
     lastans=ans;
     }
      cout<<ans;
    return 0;
}

#54121: Re: 有人可以幫我看嗎卡在80%


pofly (不挖鼻孔有害身心健康)


#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second

int main(){
    int n,m,ans=0,lastans=0;
    vector<pair<int,int>> g ={{1,0},{0,-1},{-1,0},{0,1}};
    cin>>n>>m;
    int game[20][40];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin>>game[i][j];
     int a;
     while(true){
     for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(game[i][j]==-1) continue;
            for(int k=0;k<4;k++){
                    a=1;
                  while(true){
                    if(i+g[k].F<0||j+g[k].S<0||i+g[k].F>=n||j+g[k].S>=m) break;
                    if(game[i][j]==game[i+a*(g[k].F)][j+a*(g[k].S)]){
                        ans+=game[i][j];
                        game[i][j]=-1;
                        game[i+a*(g[k].F)][j+a*(g[k].S)]=-1;
                        break;
                    }
                    if(game[i+a*(g[k].F)][j+a*(g[k].S)]>=0) break;
                    a++;
                }
                if(game[i][j]==-1) break;
            }
        }
     }
     if(lastans==ans) break;
     lastans=ans;
     }
      cout<<ans;
    return 0;
}

 

紅字的部分,位移應該是 a ,你忘記乘上去了,所以你每次檢查都只檢查相鄰的,不會檢查距離更遠的

位移後的位置應為 i + a * g[k].F,而非 i + g[k].F

 

#54126: Re: 有人可以幫我看嗎卡在80%


s310107@student2.ylsh.chc.edu. ... (Sunjoker)


#include 
using namespace std;
#define F first
#define S second

int main(){
    int n,m,ans=0,lastans=0;
    vector> g ={{1,0},{0,-1},{-1,0},{0,1}};
    cin>>n>>m;
    int game[20][40];
    for(int i=0;i        for(int j=0;j            cin>>game[i][j];
     int a;
     while(true){
     for(int i=0;i
        for(int j=0;j
            if(game[i][j]==-1) continue;
            for(int k=0;k<4;k++){
                    a=1;
                  while(true){
                    if(i+g[k].F<0||j+g[k].S<0||i+g[k].F>=n||j+g[k].S>=m) break;
                    if(game[i][j]==game[i+a*(g[k].F)][j+a*(g[k].S)]){
                        ans+=game[i][j];
                        game[i][j]=-1;
                        game[i+a*(g[k].F)][j+a*(g[k].S)]=-1;
                        break;
                    }
                    if(game[i+a*(g[k].F)][j+a*(g[k].S)]>=0) break;
                    a++;
                }
                if(game[i][j]==-1) break;
            }
        }
     }
     if(lastans==ans) break;
     lastans=ans;
     }
      cout<    return 0;
}

 

紅字的部分,位移應該是 a ,你忘記乘上去了,所以你每次檢查都只檢查相鄰的,不會檢查距離更遠的

位移後的位置應為 i + a * g[k].F,而非 i + g[k].F

 

謝謝