牛牛和妞妞从他们的好朋友果果处得到了两个盒子,盒子里是一些写了分值的彩球。牛牛和妞妞发现两个盒子里的彩球数目是相等的,就决定一人一个。
妞妞拿到自己的盒子之后,决定跟牛牛玩一个游戏,规则如下:
一开始两个人盒子里的彩球数目都是n个,由妞妞先手,两人轮流实行下面两个操作中的一个(只能选其中一个执行,不能不执行。),直到两个盒子里的彩球都被拿完位置。
1、从自己的盒子里选一个球拿出来,把球上面的分值加在自己的总得分上边。
2、从对方的盒子里选一个球拿出来,把这个球移出游戏(对方不能再拿这个球)。
妞妞和牛牛都十分聪明,不会出错,并且尽可能让自己的得分比对方多。妞妞想知道,在游戏结束的时候,他能比牛牛多得多少分呢?
输入: 第一行一个数字n,表示盒子里初始彩球的数目。 第二行n个数字ai,表示妞妞盒子里第i个彩球的分值是ai。 第三行n个数字bi,表示牛牛盒子里第i个彩球的分值是bi。 输出: 一个整数ans,表示游戏结束的时候妞妞比牛牛多的分值。 例子: 输入: 3 2 7 7 2 8 7 输出: 0
#includeusing namespace std; static bool cmp(int a, int b){ if(a>b) return true; else return false; } int main(){ int n; cin>>n; vector a, b; for(int i=0; i int t; cin>>t; a.push_back(t); } for(int i=0; i int t; cin>>t; b.push_back(t); } sort(a.begin(), a.end(), cmp); sort(b.begin(), b.end(), cmp); int ares=0, bres=0; vector ::iterator amax = a.begin(); vector ::iterator bmax = b.begin(); for(int i=0; i<2*n; i++){ if(i%2 == 0){ //A操作 if(amax != a.end() && bmax != b.end()){ if(*amax < *bmax){ bmax++; }else if(*amax >= *bmax){ ares += *amax; amax++;} }else if( amax == a.end()){ bmax++; }else if(bmax == b.end()){ ares += *amax; amax++; } }else{ //B操作 if(amax != a.end() && bmax != b.end()){ if(*amax > *bmax) amax++; else if(*amax <= *bmax){ bres += *bmax; bmax++;} }else if(bmax == b.end()) amax++; else if(amax == a.end()){ bres += *bmax; bmax++; } } } cout<


![[编程题]得分最大 [编程题]得分最大](http://www.mshxw.com/aiimages/31/870092.png)
