Battle of the Brains
TC-srm303(exercise)
250.SpiralNumbers
21 22 23 24 25 26
20 7 8 9 10 ...
19 6 1 2 11 ...
18 5 4 3 12 ...
17 16 15 14 13 ...在这样的数数规则,求N(between 1 and 2,147,483,647)的坐标
string getPosition(int N)
直接从1开始模拟不断的加cnt一直加到N,每加两次cnt后cnt++,注意处理边界于是可以得到O(sqrt(N))的算法~
500.Knights
没你一个棋盘中很多骑士的位子,如果两个骑士互不攻击,那么就是友好的,问你至少去掉多少个骑士可以让剩下的骑士都是友好关系
int makeFriendly(int N, vector <string> pos)
很裸的二分匹配
求出两个骑士是否攻击后,做一个最大匹配,由于是双向的,所以最后匹配值要除以2
1000.FourBears
给你一个地图,有4个熊,问你最少要建多少道路才能将4个熊全部连起来~
int clearPassages(vector <string> field)
解题报告说枚举两个碰头点(n*m)^2,复杂度较搞,而且如果有不止4个熊的话就不好办了
用[n][m][1<<4]的状态就可以解决这个问题,表示到点(i,j)并且状态为st个熊已经连接的最小步数,用优先队列的bfs完美解决
Popularity: 9% [?]
| 打印文章 | 这篇文章由shǎ崽于2010/01/27 16:43发表在Solution。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |