题目链接,
http://tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6101
这道题是今晚在看直播的时候某个同志遇到的题目,我觉得比较有趣,就也尝试了一下。
发现是用贪心,嗯,做的时候比较有趣,但是这个似乎也不太好有严谨的证明,就直接用所谓的势来理解了。就当是简单锻炼一下思维了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream> #include <algorithm>
using namespace std;
const int maxn = 108;
bool comp(int x, int y) { return x > y; }
int main(int argc, char const *argv[]) { int n, m; int numsA[maxn]; int numsB[maxn]; while (scanf("%d", &n), n != 0) { for (int i = 0; i < n; i++) { cin >> numsA[i]; numsB[i] = numsA[i]; } m = n; if (n == 1) return 0; sort(numsA, numsA + n, comp); sort(numsB, numsB + m); while (n >= 2) { numsA[n - 2] = numsA[n - 2] * numsA[n - 1] + 1; n--; sort(numsA, numsA + n, comp); } while (m >= 2) { numsB[m - 2] = numsB[m - 2] * numsB[m - 1] + 1; m--; sort(numsB, numsB + m); } cout << numsA[0] - numsB[0] << '\n'; }
return 0; }
|