C. 如果田忌最慢的马的速度大于国王最慢的马,那么就应该用田忌最慢的马去和国王最慢的马比(这里至少可以获利,去除所有C的情况,我们把情况转化为A,B,即使采取A,B策略亏本了(面对国王最快的马然后输掉比赛),C策略下的盈利还是大于等于亏本的)
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int N = 1010; int tianji[N], king[N]; int main() { int n; while (~scanf("%d", &n), n) { for (int i = 0; i < n; ++i) { scanf("%d", &tianji[i]); } for (int i = 0; i < n; ++i) { scanf("%d", &king[i]); } sort(tianji, tianji + n); sort(king, king + n); int king_max = n - 1, tianji_min = 0, king_min = 0; int ans = 0, i = n - 1; while (i >= tianji_min && king_max >= king_min) { if (tianji[i] > king[king_max]) { ans += 200; king_max--; i--; } else if (tianji[i] < king[king_max]) { king_max--; tianji_min++; ans -= 200; } else { if (tianji[tianji_min] < king[king_min]) { king_max--; tianji_min++; ans -= 200; } else { for (int j = tianji_min; j < n; ++j) { if (tianji[j] > king[king_min]) { ans += 200; king_min++; } else { tianji_min = j; if (tianji[tianji_min] < king[king_max]) { ans -= 200; } king_max--; tianji_min++; break; } } } } } printf("%d\n", ans); } return 0; }