- 贪心算法,各种情况下都是对自己为有利。
- 其他技巧看注释。
#include <bits/stdc++.h> using namespace std; //函数只能在外部定义 bool cmp(int i, int j){ return i>j; } int main(){ int n; long ans = 0; cin>>n; int a[100015],b[100015];//技巧,申请一个非常大得数组。 for(int i = 1;i <= n;i++) cin>>a[i];//技巧。从一开始,第一个代表第一个小球 for(int i = 1;i <= n;i++) cin>>b[i]; //从大到小排序 sort(a+1,a+1+n,cmp);//为什么要排序,因为贪心 sort(b+1,b+1+n,cmp);//注意这个比较值得是比较元素得下标,额可以部分比较哦 int i = 1; int j = 1; // 谁的堆拿完谁获胜 while(i<=n||j<=n){//因为数组已经排序贪心过了 if(a[i]>b[j]) ans+= a[i++];//那下一个求 else j++; //贪心,否则就把b的第一个给扔掉 //然后对方 if(a[i]<b[j]) ans -= b[j++]; else i++; } cout<<ans<<endl; return 0; }