2016 京东校招研发算法题 9.6
第一题:爬山
思路:
需要判断第一个有效数据,到第一天所能达到的最高高度,和最后一个有效数据到最后一天能达到的最高高度。我这里是用的一个map来存放d,h。
AC代码:
1 #include "iostream" 2 #include "map" 3 #define MAX 10000001 4 5 using namespace std; 6 7 map<int, int > mapp; 8 int n, m; 9 10 int solve() 11 { 12 int c = 0, res = 0; 13 map<int, int>::iterator iter = mapp.begin(); 14 map<int, int>::iterator end = mapp.end(); 15 end--; 16 //判断第一天 17 int h = mapp.begin()->first + (mapp.begin()->second); 18 for (iter = mapp.begin(); iter != end; iter++) 19 { 20 21 int f = abs(iter->first - (++iter)->first); 22 iter--; 23 int s = abs(iter->second - (++iter)->second); 24 iter--; 25 26 if (f < s) 27 { 28 cout << "IMPOSSIBLE" << endl; 29 return 0; 30 } 31 32 else 33 { 34 h = (f - s) / 2; 35 if (h > res) 36 res = h; 37 } 38 } 39 40 //判断最后一天。 41 int temp = end->second + (n - end->first); 42 if (temp > res) 43 res = temp; 44 45 cout << res << endl; 46 return 1; 47 } 48 49 int main() 50 { 51 while (cin >> n >> m) 52 { 53 while (m--) 54 { 55 int d, h; 56 cin >> d >> h; 57 mapp[d] = h; 58 //mapp.insert(pair<int, int>(d+1, h+1)); 59 } 60 solve(); 61 mapp.clear(); 62 } 63 }
进制均值:
思路:
分别计算2到A-1进制的所有数之和,每个进制返回一个cnt,最后分母是所有cnt的累加,分子是A-2。
代码:
1 #include "iostream" 2 3 using namespace std; 4 5 int n; 6 7 int solve(int t) 8 { 9 int cnt = 0, nn = n; 10 if (t == 1) 11 return 0; 12 while (nn != 0) 13 { 14 cnt += nn%t; 15 nn /= t; 16 } 17 return cnt; 18 19 } 20 21 int main() 22 { 23 int t, res = 0; 24 while (cin >> n) 25 { 26 res = 0; 27 int flag = n; 28 while (flag != 0) 29 { 30 res += solve(flag); 31 flag--; 32 } 33 cout << res - 1; 34 35 cout << "/" << n - 2 << endl; 36 } 37 }