UVALive-7601 Football(思维)
来源:互联网 发布:清除电脑垃圾的软件 编辑:程序博客网 时间:2024/05/16 13:43
传送门:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5623
题意:有n个球队,分别要与其他所有队进行一场比赛,即每个球队要进行n-1场比赛,胜者得1分,败者0分,现在给出这n个队的得分情况,问得分是否正确
题解:①先将得分从小到大排序,对于第i个球队,得分为x,假如有i-1分是从前i-1个球队中得到,那么还剩x-i+1分要从后面的队伍中得到(注意可以为负数,如果为负数则表示让这个球队再多输|x-i+1|场,并且是输给前i-1个队伍中的某些队伍,这样就可以进行逆推,因为不会对后面造成影响);②再逆推,先看第n个球队,如果a[n]>0,就表示第n个球队赢得的分数超过了n-1显然错误;如果a[n]==0,表示恰好赢了n-1场;如果a[n]<0,表示还应再输|a[n]|场.因此维护一个后缀和:a[i]表示第i个队伍到第n个队伍的得分和,如果a[i]>0,表示不能从后面的队伍得到足够的分数而又不能从前面的队伍得分,那么得分错误;③最后如果a[1]==0,则得分正确
#include<cstdio>#include<algorithm>#include<string.h>using namespace std;int a[10005];int main(){ int n; while(~scanf("%d",&n)){ int flag=1; memset(a,0,sizeof(a)); for(int i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]>=n||a[i]<0) flag=-1; } sort(a,a+n); for(int i=0;i<n;i++) a[i]-=i; for(int i=n-1;i>=0;i--){ a[i]+=a[i+1]; if(a[i]>0) flag=-1; } if(a[0]!=0) flag=-1; printf("%d\n",flag); } return 0;}
0 0
- UVALive-7601 Football(思维)
- UVALive 6530 Football (水
- 【瞎搞】 UVALive 6530 Football
- HDU58739(Football Games)思维
- hdu 5873 Football Games 思维
- Codeforces 417C Football【思维】
- 【贪心】UVALive 6530——Football
- UVALive 7417 思维
- UVALive 7339 Owllen【思维】
- codeforce 432B - Football Kit 思维题
- hdu 5873 Football Games(思维题)
- UVALive 7147 思维题(贪心)
- UVALive.3708 Graveyard (思维题)
- UVALive.3708 Graveyard (思维题)
- Football
- Football
- Football
- Football
- Java Comparator Vs. Comparable
- 数组与指针的混合使用
- 神器 Tmux 的使用技巧
- 插入排序、选择排序和快速排序的算法实现
- Java集合类详解
- UVALive-7601 Football(思维)
- 前端:css页面布局总结
- src标签中${pageContext.request.contextPath }无效问题解决方案
- Python socket实现多对多全双工通信
- 干货:使用Spine制作柔性的骨骼动画详解(DragonBones也能使用)
- 第十四周项目1数组大折腾(5)
- hihoTrie树
- 匿名内部类 是否可以继承其它类,是否可以实现接口?
- 【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式