ZOJ 1101 Gamblers
题目大意:一群人聚众赌博。每个人先分别押注不同的金额,可以相互借钱。开奖之后,如果某个人的押注的金额正好等于任何其他三个人金额总和,那这个人就赢得其他三个人的赌注。如果同时有两个以上的赢家,押注金额最大的那个人是最终的赢家。首先输入玩家的个数,然后输入每个玩家的押注金额,经过运算输出赢家的财富(或者 no solution)。
解法:
参考代码:参考了下面链接的文章。首先,对所有押注金额进行从小到大排序,然后用枚举法试。因为并列的赢家取押注最多的获胜,所以从后往前试赢家的押注金额。稍作分析可知三个数当中,至少要有一个数在目标数的左边(小于),另外两个数可能在左边,也可能在右边(因为押注金额可以为负)。最外层循环是目标数,第二和第三层是前两个数的枚举,在第二个数和最大值之间查找第三个数。找到了就返回结果。
/*
* reference: www.cnblogs.com/pcoda/archive/2012/09/02/2667981.html
*
*
*/ #include<iostream>
#include<algorithm>
using namespace std; int n,amount[1002];
int work();
int search(int k,int val); int main(){
int i,ans;
while(cin>>n&&n){
for(i=0;i<n;i++)
cin>>amount[i];
sort(amount,amount+n);
ans=work();
if(ans==-1)cout<<"no solution"<<endl;
else cout<<amount[ans]<<endl;
}
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=amount[i]-amount[j]-amount[k];
pos=search(k,tmp); //在第二个数和最大值之间查找第三个数
if(pos&&pos!=i) return i;
}
}
}
return -1;
}
int search(int k,int val){ //二分法查找
int l,m,r;
l=k+1;
r=n-1;
while(l<=r){
m=(l+r)>>1;
if(amount[m]==val) return m;
if(amount[m]<val) l=m+1;
else r=r-1;
}
return 0;
}
ZOJ 1101 Gamblers的更多相关文章
- ZOJ 1101 Gamblers 二分
		
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101 让你在一堆互不相同的数中查找是否有a=b+c+d,若有不同的解,则输出最大 ...
 - POJ题目细究
		
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
 - 【转】POJ百道水题列表
		
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
 - ZOJ题目分类
		
ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...
 - zoj 3471 Most Powerful
		
题目链接:zoj 3471 Most Powerful 作者:jostree 转载请说明出处 很经典的状态dp,使用i的二进制位表示粒子的状态,0表示存在,1表示不存在.dp[i]表示在状态i的情况 ...
 - ZOJ  People Counting
		
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
 - ZOJ 3686 A Simple Tree Problem
		
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
 - ZOJ Problem Set - 1394 Polar Explorer
		
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
 - ZOJ Problem Set - 1392 The Hardest Problem Ever
		
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
 
随机推荐
- POJ 1573 Robot Motion 模拟 难度:0
			
#define ONLINE_JUDGE #include<cstdio> #include <cstring> #include <algorithm> usin ...
 - UVa 10253 - Series-Parallel Networks
			
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
 - 一模 (1) day2
			
第一题:(水题) 题目大意:就是给出扫雷的图,然后统计每个九宫格的雷的个数. 解题过程: 1.好久没做这样的水题了.直接模拟水过.. 第二题: 题目大意:给出一个长度小于1000的数k,要求一个尽可能 ...
 - Hibernate中的集合映射
			
1.定义实体 public class User { private int userId; private String userName; private Set<String> ad ...
 - mybatis写mapper文件注意事项(转)
			
原文链接:http://wksandy.iteye.com/blog/1443133 xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响 < < > & ...
 - git——学习笔记(二)远程仓库
			
GIT杀手锏之一——远程仓库 拥有远程仓库的两个办法 1:搭一个Git服务器 2:在GitHub上免费托管的Git仓库 本地仓库 远程仓库 一.在GitHub上免费托管的Git仓库 电脑: 1. ...
 - comet
			
comet 1.简介: 基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构,基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求.C ...
 - Spring MVC配置文件解释
			
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
 - Motorola C118修改滤波器组件
			
所需工具: 热风枪.恒温焊台.镊子.助焊膏.锡丝.滤波器组件 关于怎么使用热风枪拆屏蔽盖将在后期更新视频,以下为修改滤波器流程.以下热风枪设置温度只针对快克957DW(不同品牌风枪和型号可能会有温差) ...
 - 桟的min实现:O(1)时间复杂度
			
实现桟的push和pop操作,以及桟的min操作返回桟中的最小值,要求这三个操作的时间复杂度均为O(1). 在Java中可以使用LinkedList实现桟的各种操作,这里使用双向链表实现桟的push和 ...