2014-02-08 129 views
5

我一直在尋找通過在TopCoder的問題的解決方案,並跨越這一個來:意義「?<=」操作符

http://community.topcoder.com/stat?c=problem_solution&rm=249419&rd=9996&pm=6621&cr=309453

目前我沒興趣知道如何算法工程,但代碼中「<?=」運算符的用法是什麼?我嘗試編譯我的機器上的代碼,並在ideone.com上編譯代碼,但令我驚訝的是,代碼無法編譯。運營商做了什麼,爲什麼它不能在像ideone這樣的標準編譯器上工作,並且代碼在Topcoder上通過了系統測試?

的代碼是在這裏:

using namespace std; 

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <ctype.h> 
#include <string.h> 
#include <string> 
#include <sstream> 
#include <iostream> 
#include <vector> 
#include <queue> 
#include <stack> 
#include <set> 
#include <map> 
#include <algorithm> 
#include <functional> 

#define PB push_back 
#define SZ size() 
#define REP(v, hi) for (int v=0; v<(hi); v++) 
#define REPD(v, hi) for (int v=((hi)-1); v>=0; v--) 
#define FOR(v, lo, hi) for (int v=(lo); v<(hi); v++) 
#define FORD(v, lo, hi) for (int v=((hi)-1); v>=(lo); v--) 

typedef vector <int> VI; 
typedef vector <VI> VVI; 
typedef vector <VVI> VVVI; 

/* ############################ THE REAL CODE ############################ */ 

class RoboRace { 
    public: 
    int startTime(vector <string> m, vector <string> _c) { 
    string c; 
    REP(i,_c.SZ) c+=_c[i]; 
    int N=c.SZ; 
    int Y=m.SZ, X=m[0].SZ; 
    VVVI best(Y, VVI(X, VI(N+1, 99999))); 
    int ey=-1,ex=-1; 
    int yy=-1,yx=-1; 
    int fy=-1,fx=-1; 
    REP(y,Y) REP(x,X) { 
     if (m[y][x]=='Y') { yy=y; yx=x; m[y][x]='.'; } 
     if (m[y][x]=='F') { fy=y; fx=x; m[y][x]='.'; } 
     if (m[y][x]=='X') { ey=y; ex=x; m[y][x]='.'; } 
    } 
    REP(n,N+1) best[ey][ex][n]=n; 
    REPD(n,N) REP(y,Y) REP(x,X) { 
     if (m[y][x]=='#') continue; 
     best[y][x][n] <?= best[y][x][n+1]; 
     if (c[n]=='N' && y>0) best[y][x][n] <?= best[y-1][x][n+1]; 
     if (c[n]=='S' && y<Y-1) best[y][x][n] <?= best[y+1][x][n+1]; 
     if (c[n]=='W' && x>0) best[y][x][n] <?= best[y][x-1][n+1]; 
     if (c[n]=='E' && x<X-1) best[y][x][n] <?= best[y][x+1][n+1]; 
    } 

    REP(n,N) if (best[yy][yx][n] < best[fy][fx][n]) return n; 
    return -1; 
    } 
}; 
+0

WTH應該[標籤:C++]'<?='操作符是?從來沒有聽說過那個... –

+0

@πάνταῥεῖ我不確定它是一個運算符,但它似乎更像是像我這樣的新手的運算符,類似於「+ =」運算符。 – shivshnkr

+0

正如jrok的回答聽起來對我來說,你最好不要使用它! –

回答

6

這是一個GCC擴展,複合最小運營商,即最小的操作數分配給左邊的操作數二元運算符。它在gcc手冊的deprecated features list中提到。

A <?= B表示將A和B的最小值分配給A

有(中)也

<?  minimum operator 
>?  maximum operator 
>?= compound form of maximum operator 

理智的代碼如今將使用std::min代替。

+0

但爲什麼這個代碼不能在我的機器或ideone.com上編譯,儘管它通過了系統測試? – shivshnkr

+0

@shivshnkr,這是一個***棄用*** GCC *擴展*。 – chris

+0

@chris它意味着只有topcoder仍然支持棄用的東西? – shivshnkr