SRM 638 Div.2
阿新 • • 發佈:2018-10-10
字符 n-2 fin span count des maxsize pre 形式
250
給一個字符串
要求從一種形式換成另一形式
class NamingConvention{ private: int a, b, c; public: int d; string toCamelCase(string str) { int p = 0; while ((p = str.find('_', p)) != string:: npos) { str[p + 1] = toupper(str[p + 1]); str.erase(p, 1); p = p + 1; } return str; } };
500
一道驚險刺激的好題
可惜就是數據小了點
所以直接枚舉答案就能過
這套比賽Div.1的600分題就是它的加強版.
class NarrowPassage2Easy { public: int count(vector <int> size, int maxSizeSum) { int len = size.size(); memset(vis, 0, sizeof(vis)); for (int i = 1; i <= len; i++) { for (int j = i + 1; j <= len; j++) { int x = size[i - 1] + size[j - 1]; if (x > maxSizeSum) vis[j][i] = 1; } } int sum = 0; if (len == 1) return 1; if (len == 2) { if (size[0] + size[1] > maxSizeSum) return 1; return 2; } if (len == 3) { for (int i = 1; i <= len; i++) { for (int j = 1; j <= len; j++) { if (i == j) continue; for (int k = 1; k <= len; k++) { if (k == i || k == j) continue; if (vis[i][j] || vis[i][k] || vis[j][k]) continue; sum++; } } } } if (len == 4) { for (int i1 = 1; i1 <= len; i1++) { for (int i2 = 1; i2 <= len; i2++) { if (i1 == i2) continue; for (int i3 = 1; i3 <= len; i3++) { if (i1 == i3 || i2 == i3) continue; for (int i4 = 1; i4 <= len; i4++) { if (i1 == i4 || i2 == i4 || i3 == i4) continue; if (vis[i1][i2] || vis[i1][i3] || vis[i1][i4] || vis[i2][i3] || vis[i2][i4] || vis[i3][i4]) continue; sum++; } } } } } if (len == 5) { for (int i1 = 1; i1 <= len; i1++) { for (int i2 = 1; i2 <= len; i2++) { if (i1 == i2) continue; for (int i3 = 1; i3 <= len; i3++) { if (i1 == i3 || i2 == i3) continue; for (int i4 = 1; i4 <= len; i4++) { if (i1 == i4 || i2 == i4 || i3 == i4) continue; for (int i5 = 1; i5 <= len; i5++) { if (i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5) continue; if (vis[i1][i2] || vis[i1][i3] || vis[i1][i4] || vis[i1][i5] || vis[i2][i3] || vis[i2][i4] || vis[i2][i5] || vis[i3][i4] || vis[i3][i5] || vis[i4][i5]) continue; sum++; } } } } } } if (len == 6) { for (int i1 = 1; i1 <= len; i1++) { for (int i2 = 1; i2 <= len; i2++) { if (i1 == i2) continue; for (int i3 = 1; i3 <= len; i3++) { if (i1 == i3 || i2 == i3) continue; for (int i4 = 1; i4 <= len; i4++) { if (i1 == i4 || i2 == i4 || i3 == i4) continue; for (int i5 = 1; i5 <= len; i5++) { if (i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5) continue; for (int i6 = 1; i6 <= len; i6++) { if (i1 == i6 || i2 == i6 || i3 == i6 || i4 == i6 || i6 == i5) continue; if (vis[i1][i2] || vis[i1][i3] || vis[i1][i4] || vis[i1][i5] || vis[i1][i6] || vis[i2][i3] || vis[i2][i4] || vis[i2][i5] || vis[i2][i6] || vis[i3][i4] || vis[i3][i5] || vis[i3][i6] || vis[i4][i5] || vis[i4][i6] || vis[i5][i6]) continue; sum ++; } } } } } } } return sum; } };
1000
Description
從一顆有邊權的無根樹的任意節點出發能到達最遠的點有多少種
Solution
看了一下數據範圍, 感覺好像這個題是來搞笑的
口胡一下吧
首先最多19個點的話\(2^19\)大概是50萬, 然後從這些點寬搜或者求最短路?
SRM 638 Div.2