#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;
}
#include <bits/stdc++.h> |
紅字的部分,位移應該是 a ,你忘記乘上去了,所以你每次檢查都只檢查相鄰的,不會檢查距離更遠的
i + a * g[k].F,而非 i + g[k].F
#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
謝謝