本文主要是介绍J - Scarily interesting!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:两个队进行比赛,每个队n个人,现在已知每个人会得多少分。每个人的得分不超过6。比赛进行n回合,每个回合一个队派一个人参赛,每个人只能参赛一次。一个队伍前i个回合的总得分为该队伍派出的前i个人的得分和。现在让你输出一个方案,让比赛尽量不失去悬念。假设第i回合比赛已经没有悬念,那么我们需要输出一个方案,让i尽量的大。
思路:
一看就是贪心题,哎,贪心思路不对,我和队友把它按照先输出相同的来贪的,结果WA!!其实正确的贪心是首先判断两个队伍谁最终会获胜。对于最后会输的队伍,从最强的人派出来参赛,对于最后会赢的队伍,先派最弱的人参赛,这样让比赛上演逆转,悬念一定能保持得最久!!明白这一点题目就很简单!!!
代码:
#include <bits/stdc++.h>
using namespace std;
#define maxn 1005
struct node{int point;int id;
}a[maxn],b[maxn];
bool cmp(node aa,node bb)
{return aa.point<bb.point;
}
bool cmp1(node aa,node bb)
{return aa.point>bb.point;
}
int main()
{int i,j,n,suma,sumb;while(cin>>n){suma=0;sumb=0;for(i=1;i<=n;i++){cin>>a[i].point;suma+=a[i].point;a[i].id=i;}for(j=1;j<=n;j++){cin>>b[j].point;sumb+=b[j].point;b[j].id=j;}if(suma>sumb)//即a会赢{sort(a+1,a+1+n,cmp);sort(b+1,b+1+n,cmp1);for(i=1;i<=n;i++)cout<<a[i].id<<' '<<b[i].id<<endl; }else {sort(a+1,a+1+n,cmp1);sort(b+1,b+1+n,cmp);for(i=1;i<=n;i++)cout<<a[i].id<<' '<<b[i].id<<endl; }
}return 0;
}
心得:::
贪心贪的要准啊啊啊啊啊啊啊
这篇关于J - Scarily interesting!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!