实战复盘:用Frida绕过Android App签名校验的三种思路(附完整JS脚本)
2026/6/1 7:57:20
题目描述
中国古代的历史故事“田忌赛马”是为大家所熟知的。话说齐王和田忌又要赛马了,他们各派出N匹马,每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
输入格式
第一行为一个正整数n (n < = 1000) ,表示双方马的数量。 第二行有N个整数表示田忌的马的速度。 第三行的N个整数为齐王的马的速度。
输出格式
仅有一行,为田忌赛马可能赢得的最多的钱,结果有可能为负。
输入样例
3
92 83 71
95 87 74
输出样例
200
以下是我的代码:
#include <stdio.h> #include <math.h> //引入函数使用冒泡排序法将马的数量从慢到快排序 void pai(int a[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (a[j] > a[j + 1]) { int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } } int main() { int n; scanf("%d", &n); int t[10001]; int q[10001]; for (int i = 0; i < n; i++) { scanf("%d", &t[i]); } pai(t, n); for (int i = 0; i < n; i++) { scanf("%d", &q[i]); } pai(q, n); int tslow = 0;//田忌最慢马的索引 int qslow = 0;//齐王最慢马的索引 int tfast = n-1;//田忌最快马的索引 int qfast = n-1;//齐王最快马的索引 int s = 0; for (int i = 0; i < n; i++) { //先将田忌最快的马和齐王最快的马比 if (t[tfast] > q[qfast]) { s += 200; tfast--; qfast--; } //快马比不过就看田忌慢马是否大于齐王慢马 else if (t[tslow] > q[qslow]) { s += 200; tslow++; qslow++; } //如果都比不过就用田忌最慢的马去和齐王最快的马去比 else if (t[tslow] < q[qfast]) { s -= 200; tslow++; qfast--; } //处理平局 else { tslow++; qfast--; } } printf("%d",s); return 0; }用这种方法能最终得出使田忌赢得最多或者亏的最少的情况 。