- 论坛徽章:
- 14
|
回复 10# ssfjhh
算法应该是对的。
设两蚁相遇,则交换灵魂,而肉体掉头行驶。
以 3 -7 11 -17 23 为例,
第一个负数为-7,则说明-7的灵魂在左边第一个掉下去,耗时7秒。而承载起灵魂的肉体一定是左边第一个数3
第二个负数为-17,则说明-17的灵魂在左边第二个掉下去,耗时17秒。而承载起灵魂的肉体一定是左边第二个数-7
右边亦复如是
我把你python代码改为C++代码^_^(这才是我主要目的)- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- void ant( int m, std::initializer_list<int> k )
- {
- // python: p = sorted(args, key = abs)
- vector<int> v1( k );
- sort( v1.begin(), v1.end(), [](int a, int b){ return abs(a)<abs(b); } );
- // python: t = [i for i in p if i<0] + [ for i in p if i >0]
- vector<int> v2( k );
- sort( v2.begin(), v2.end(), [](int a, int b){ return a<0&&b<0 ? a>b : a<b; } );
- // python: zip(-t或m-t,p)
- vector<pair<int,int>> v3;
- for( size_t i=0; i!=k.size(); ++i )
- v3.push_back( make_pair(v2[i]>0?m-v2[i]:0-v2[i], v1[i]) );
- // python: sorted zip
- sort( v3.begin(), v3.end(), [](pair<int,int> a, pair<int,int> b){ return a.first<b.first; } );
- // python: print
- for( auto v : v3 )
- cout << " (" << v.first << ',' << v.second << ')';
- cout << endl;
- }
- int main()
- {
- ant( 27, {3,-7,11,-17,23} );
- return 0;
- }
复制代码 |
|