【发布时间】:2013-12-31 08:59:48
【问题描述】:
我在 SnapDragon 的 topcoder 解决方案中多次观察到这条线 ret http://community.topcoder.com/stat?c=problem_solution&rm=166781&rd=5865&pm=3115&cr=272072。上面的行出现在从底部算起的第 6 行。 这是代码
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;
}
};
【问题讨论】:
-
你能把代码复制粘贴到这里吗?我无法访问它。
-
在需要登录的 URL 后面发布代码有点意思......
-
我没有看到任何
<=?s -
是
ret <?= x + m[v];行 -
有一些 = 不是标准 c++ 的一部分,而是一些 gcc 扩展(最小最大运算符)。只发布那部分而不是整个 blob 会很有用
标签: c++