2013-12-12 5 views
-1

Я наблюдал эту линию в растворе зева в TopCoder несколько раз RET http://community.topcoder.com/stat?c=problem_solution & ет = 166781 & х = 5865 & pm = 3115 & cr = 272072. вышеприведенная строка отображается на 6-й строке снизу. Вот кодЧто такое значение «<? =» В C++

vector<string> tokenize(string s, string ch) { 
    vector<string> ret; 
    for(int p = 0, p2; p < s.size(); p = p2+1) { 
    p2 = s.find_first_of(ch, p); 
    if(p2 == -1) p2 = s.size(); 
    if(p2-p > 0) ret.push_back(s.substr(p, p2-p)); 
    } 
    return ret; 
} 

vector<int> tokint(string s, string ch) { 
    vector<int> ret; 
    vector<string> p = tokenize(s, ch); 
    for(int i = 0; i < p.size(); i++) 
    ret.push_back(atoi(p[i].c_str())); 
    return ret; 
} 

vector<vector<int> > tokmat(vector<string> s, string ch) { 
    vector<vector<int> > ret; 
    for(int i = 0; i < s.size(); i++) 
    ret.push_back(tokint(s[i], ch)); 
    return ret; 
} 

int pref[15][30]; 

class OrderFood { 
public: 
int selectEntrees(vector <int> a, vector <string> b) { 
    int i, j, k, x, y, z, n; 

    VVI t = tokmat(b, " "); 
    for(i = 0; i < t.size(); i++) 
    for(j = 0; j < t[i].size(); j++) 
    pref[i][t[i][j]] = 1; 
    n = a.size()/2; 
    map<VI, int> m; 
    for(i = 0; i < (1<<n); i++) { 
    VI v(t.size()); 
    for(j = 0; j < n; j++) if(i&(1<<j)) 
    for(k = 0; k < t.size(); k++) 
     v[k] += pref[k][j]; 
    for(j = 0; j < t.size(); j++) if(v[j] > 2) break; 
    if(j < t.size()) continue; 
    x = 0; 
    for(j = 0; j < n; j++) if(i&(1<<j)) 
     x += a[j]; 
    if(m.count(v)) 
     m[v] <?= x; 
    else 
     m[v] = x; 
    } 
    int n2 = a.size()-n; 
    int ret = 1000000000; 
    for(i = 0; i < (1<<n2); i++) { 
    VI v(t.size(), 2); 
    for(j = 0; j < n2; j++) if(i&(1<<j)) 
    for(k = 0; k < t.size(); k++) 
     v[k] -= pref[k][j+n]; 
    for(j = 0; j < t.size(); j++) if(v[j] < 0) break; 
    if(j < t.size()) continue; 
    x = 0; 
    for(j = 0; j < n2; j++) if(i&(1<<j)) 
     x += a[j+n]; 
    if(!m.count(v)) continue; 
    ret <?= x + m[v]; 
    } 
    if(ret == 1000000000) return -1; 
    return ret; 
} 
}; 
+6

Можете скопировать и вставить код здесь? Я не могу получить к нему доступ. – AVP

+4

Проводка кода, который находится за URL-адресом с требуемым логином, является бит-значением ... –

+3

Я не вижу никаких '<=?' В том, что – scrblnrd3

ответ

11

Оператор <?= является минимальным оператором, а >?= является максимальным оператором. Оба они являются нестандартными расширениями GCC. a<?=b - a=min(a,b). Вместо этого используйте a=min(a,b). Это гораздо более удобочитаемо, и работает лучше по платформам.

+6

Они не устарели, они никогда не были частью стандартного C++ и всегда были расширением gcc (и устарели там) – PlasmaHH

+0

Спасибо за это, у меня никогда не было видел это раньше. –

+0

@PlasmaHH Спасибо. – scrblnrd3

0

operator<?= является GCC extension. В вашем примере он устанавливает ret как минимум ret и x + m[v].

Это не стандартный оператор и, следовательно, не переносится на разные компиляторы.

Смежные вопросы