ZOJ-1101-Gamblers
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1101
题目大意:
游戏开始时,他们各自将自己的赌注盖住,同时任何两个赌徒的赌注是不同的,如果其中一个赌徒没有钱了,他可以借一些筹码,但是他的赌注就是负数了。假设,他们的赌注都是整数。
然后他们揭开所有的赌注。赢家为:他的赌注是其他三个人的赌注的综合。如果赢家不止一家,那么拥有最大赌注的人是赢家。
算法分析:
对于此题,求三个数n1,n2,n3使其之和为另一个数字n。如果存在多种情况,求n值最大的一个。所以首先将所有的数字从小到大排列,从后向前求解,这样就保证求得的第一个赢家为最大值。
另外三个数就需要枚举了。三个赌徒,至少有一个在赢家(i)的前面(j),但是由于存在负数,所以另外两个赌徒的编号就有可能在赢家的后面,最初考虑这题的时候,忽略了这点(如果没有负数,三个赌徒肯定都在赢家的前面了)。另外就是如果三个数都要考枚举的话,算法复杂度就高了。但是由于前面已经对数组进行排序,所以可以先枚举其中两个(j,k),则第三个赌徒的赌注为tmp = jetton[i] – jetton[j] – jetton[k]; 然后进行二分查找tmp,如果存在,则结束枚举就行了,这样可以降低算法复杂度,不过仍为O(n^3lgn)
#include<iostream> #include<algorithm> using namespace std;#define MAXN 1002int n,jetton[MAXN];int search(int k,int val) //二分查找tmp {int left,right,mid;left = k+1; right = n-1;while(left<=right){mid = (left+right)>>1;if(jetton[mid] == val) return mid;if(jetton[mid] < val) left = mid+1;else right = mid-1;}return 0; }int work() {int i,j,k,tmp,pos;for(i=n-1;i>0;i--)//从后向前查找 {for(j=0;j<i;j++) //第一个 {for(k=j+1;k<n;k++) //第二个 {tmp = jetton[i]-jetton[j]-jetton[k];pos = search(k,tmp); //查找第三个是否存在if(pos && pos != i) //如果符合要求,直接返回 {return i;}}}}return -1; }int main() {int i;while(cin>>n && n){for(i=0;i<n;i++)cin>>jetton[i];sort(jetton,jetton+n); //从小到大排列int ans = work();if(ans==-1) cout<<"no solution"<<endl;else cout<<jetton[ans]<<endl;}return 0; }
转载于:https://www.cnblogs.com/pcoda/archive/2012/09/02/2667981.html
ZOJ-1101-Gamblers相关推荐
- POJ ZOJ题目分类
POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...
- POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)
水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法: (1)枚举 (1753,2965) (2)贪心(13 ...
- ZOJ 题目分类,学校的一个巨巨做的。
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar ...
- c语言大小写字母互换1005,1005 Jugs,1005jugs
1005 Jugs,1005jugs 辗转相减,新手入门题.两个容量的灌水题,无所谓最优解. 1 #include 2 3 intmain(){4 intA,B,T,sA,sB;5 while(sca ...
- poj题目详细分类及算法推荐题目
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- ACM POJ 题目分类(完整整理版本)
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- PUK ACM题目分类
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- pku,zju题目分类
哎呦喂,直接ctrl+A了.话说浙江大学的题还见过的呢.. 公告: [意见反馈][官方博客] ural pku Zju 题目分类 收藏 感谢 mugu 的提供.... Ural Problem ...
- ZOJ POJ题目分类
ZOJ题目分类 初学者题:1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...
- 【ZOJ题目分类】备忘
ZOJ 题目 分类 初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 ...
最新文章
- linux动态库命名规则
- java中关于时间的计算
- 数据驱动的未来城市八大趋势
- TCP和UDP可以同时监听相同的端口
- 用户访问网站的基本流程
- 汇编语言学习工具Dosbox的安装与配置(一)
- 分享一个自用的,随便找到的组件,留作记录
- C++中的explicit关键字用法
- java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码
- 散度与梯度在图像中的应用
- 有人说赚钱靠项目,也有人说赚钱靠技术
- plsql日期转换错ORA-01830
- 全网最!详!细!tarjan算法讲解
- harmonyos2.0刷机包,鸿蒙harmony os 2.0刷机包|鸿蒙harmony os 2.0系统刷机包 v1.021-520下载站...
- ctfshow 做题 MISC入门 模块 31-40
- (官网)虚幻3--基础游戏快速入门
- 小象学院人工智能机器学习全新升级版
- (Java实现) 美元汇率
- 微信怎么彻底删除微信消息?
- 哈希表哪家强?编程语言找你来帮忙
热门文章
- Spring Cloud(6.1):搭建OAuth2 Authorization Server
- 8、Python MySQL - mysql-connector 驱动
- Django两天搭建个人博客
- Android Studio升级后报 method not found: 'runProguard'的错误
- [转]php获取含中文字符串长度
- 【酒桌文化】座次、上菜、喝酒的规矩
- linux系统路由功能记录
- vim语法高亮的错误解决办法
- 发送临时文件被服务器拒绝,临时会话说服务器拒绝了您发送离线文件的请求 - 卡饭网...
- Linux 系统中的定时任务及延时任务