zoj 1101 Gamblers 为什么总是WA?

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101

一道被各种人认为简单题的题,但是我WA了将近10次,我觉得有必要写出来,以供有需要的人参考。

 

这道题就是暴力解,需要的只是少量的优化,但是在优化过程中还是出了很多问题,其中的逻辑需要很严密。从另一方面可以看到ZOJ内部的测试数据很bt。好了,下面就贴上我改了很多仍然WA的代码,照着代码来分析一些容易出错的地方。

 

好了,我们一点点慢慢看:

  1. sort,我没有做过实验,不sort会不会错,不过题目没有明确表示input数据是排序过的,虽然example是不降序排列的
  2. i循环处和j循环处,这两个地方都是因为没有充分考虑负数情况。在i循环处,i>=3是基于bets[i]是三者之和,因此习惯性的以为它(bets[i])是最大的,但是由于可以有负数,因此它不一定是最大的,只能确定它一定不是最小的。
  3. 在j循环处,由于存在负数bet,所以i不是最大的,所以j非常可能比i大(循环中的逻辑决定了j>k>l,所以只需要在j循环中修改即可)。由于这个地方的改动,需要在k循环内部再加入if(i==j || i==k )的判断
  4. 循环内部比较判断处。if(tmp2 == bets[j] || tmp2 == bets[k])。这样的判断初看貌似是对的,至少我是这么觉得,但是忘记了可能bets[k] == bets[l]的情况。其他情况不会出现问题,因为bets[j] >= bets[k] >= bets[l](j>k>l)。所以判断应该取消,不需要判断。

好了,大致就这几个地方,下面贴一下最终acc的代码,可能依然有逻辑错误,欢迎指正^^。

 

至于

#ifndef ONLINE_JUDGE

    freopen("input.txt", "rt", stdin);

    freopen("output.txt", "wt", stdout);

#endif

如果要自己本地执行代码,就新建个INPUT.TXT,或者直接注释掉这几句。

还有我用了GOTO,我只是比较懒的在每层loop里面做判断,所以请谅解。

ZOJ 1101 Gamblers 二分 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101 让你在一堆互不相同的数中查找是否有a=b+c+d,若有不同的解,则输出最大的。 思路: 排序后二分,从大到小枚举。设sum=a[index]-a[i]-a[j],然后查找sum是否在数组中存在即可。 二分要写对,然后i==j || index==j || ind... 阅读详情

相关推荐

ZOJ 1101赌徒

题目大意 t组数据,每组数据有一个数n和一个长度为n的序列,保证序列中的每个数−536870912<a[]i<536870911−536870912<a[]i<536870911-536870912a[i]+a[j]+a[k]=a[x]a[i]+a[j]+a[k]=a[x]a[i]+a[j]+a[k]=a[x]中的max{a[x]}max{a[x]}max\{a[x]\}...

Ajwallet 656

ZOJ P1101 Gamblers(赌徒)

题目:点击查看题目题意:一共有若干组数据,且提供给我们每个赌徒的筹码(包含负数),但是他们非常傻,以至于谁赢了都不知道,所以现在要求我们找出最大的赢家(为什么呀???)分析:首先来看下题目,一个人能赢的条件是:A=B+C+D。如果我们去枚举A、B、C、D,铁定时超,就算去枚举B、C、D也一样。但我们不妨把这个式子变形一下:A-B=C+D。这样我们就可以使用二分或哈希了。时间复杂度为:O(n^3)*l

qq_35786326的博客 673

ZOJ1101-赌徒【二分查找】

前言 这道题原本老师说是哈希的练习题,结果发现哈希的代码量忒大,然后就用二分了。 正题 有n个赌徒,如果一个赌徒的钱数是其中三个的和那么这个赌徒是赢家,输出最多钱的赢家。 输入输出(建议无视) Input 输入一个整数n (1<=n<=1000)表示有n个赌徒。 接下去n行各自输入一个整数 x (-536870912 ...

weixin_30835923的博客 418

POJ原题测试数据合集+使用方法

原文地址:POJ测试数据合集 可以在疯狂WA的时候检测卡在哪里了,非常方便(网站加载很慢,但是应该不用科学上网) 使用方法 在poj的题目下,有来源的话会注明来源,例如poj-1753 Source Northeastern Europe 2000 可以看出是东北部欧洲2000年的题目,那么在下面的连接中寻找Northeaster

iwts 1万+

zoj1101 Gamblers

开始用递归写了一个,总是TLE。

名场聚散多高富,沧海浮沉一屌丝 643

zoj 1101Gamblers排序,搜索

应该是2点开始看这道题吧,现在5点,刚好用了3个小时,期间,整理了一下快速排序的具体代码,然后,思考这道题怎样搜索出答案。。。。。一次WA,然后就AC了,还行吧,虽然在别人看来会很差。。。。 自己写的代码有个缺点,还是太长了。。不过这次前边加了快排的函数,中间的for循环用来搜

1083

zoj 1101 Gamblers

这道题大意有n个unique的整数,找出其中最大等于另外三个整数之和的数。 s = a + b + c, 最大的s。   刚开始因为没有考虑好负数和排除要比较值的情况,一直WA。最后AC的代码如下: 开始的时候做循环拿x做上限,一直WA(因为可能存在负数,所以要到n);另外就是每个循环里要跳过x。 #include #include #include using name

u010674227的博客 339

zoj 1101 Gamblers(快排+二分)

<br />水题。不过纠结了好久。哎,现在刷水题能力越来越低了。YM。<br /> <br />给你N个数,让你求出最大的一个m = a+b+c。这四个数是N个数中各不相同的数。<br /> <br />刚才终于知道我思路哪有问题了。我是先用快排,从小到大排序。然后倒着循环。<br /> <br />使 s = a[i] + a[j] + a[k]。然后二分查找找s,如果找到,那么输出。<br /> <br />一直WA。看别人的,他们找的是,s = a[i] - a[j] - a[k]。找到s后,输出a[

小媛在努力~ 1747

hdu 3788 hdoj 3788

ZOJ问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 601    Accepted Submission(s): 186 Problem Description 对给定的字符串(只包含'z','o','j'三种字符

sonfree的专栏 611

ZOJ-1101-Gamblers【你为什么还在超时,用二分吧】

Gamblers Time Limit:2 Seconds Memory Limit:65536 KB A group ofngamblers decide to play a game: At the beginning of the game each of them will cover up his wager on the table and the assi...

欢迎访问方偲的博客 358

算法习题

算法习题复习

zhaiax672的博客 2442

ZOJ坑爹的题意和数据】浙大 zoj 4706 Draw Something Cheat

/* THE PROGRAM IS MADE BY PYY */ /*----------------------------------------------------------------------------// Copyright (c) 2012 panyanyany All rights reserved. URL : http://acm.zju.edu

panyanyany(飞雨幻沙) 1003

ACM题目测试数据生成方法(个人经验)

首先先写一个生成test.in的代码,利用随机数生成测试数据。 #include using namespace std; int main() { freopen("test.in","w",stdout);//设置 cout printf 这些输出流都输出到 test.in里面去 for(int i=0;i<1e4;i++) cout<<rand

china震震的博客 1万+

Gamblers

A group of n gamblers decide to play a game: At the beginning of the game each of them will cover up his wager on the table and the assitant must make sure that there are no two gamblers have put t

笑看风云起的专栏 852

ZOJ1002所有测试数据正确,无法AC,请给反例

fire Net Time Limit: 2 Seconds Memory Limit: 65536 KB Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle...

大金的专栏 186

我的ACM题目测试数据产生方法

到网上搜了下ACM题目产生方法,却没有搜索到有用的资料,那只能自己钻研一下了,下面把钻研出的结果给大家分享一下。 我们知道,ACM的题目对算法要求很高,OJ上而如何评判一个算法的复杂度靠的是测试数据。一般地,题目需要数据量比较大,不可能人工地去产生,只能借助计算机产生测试数据,而为了避免数据出现规律性,那应该尽量让数据随机。接下来,我们就研究最一般的问题,如何产生int,long long ,大

哇哈哈的专栏 7125

Gamlers

Time Limit: 1 Second Memory Limit: 32768 KB n 个赌徒决定玩一个游戏. 在游戏开始时,每个赌徒把他们的赌注盖在桌子上,助手得确定没有任何两人有相同的赌注数目。如果有人没钱了, 他是可以借一些筹码,但是他的赌注是视为无效的。 假设

balabala 468
上一篇: Eclipse 插件安装方法
下一篇: ZOJ 1109 Language of FatMouse
Lory_yang
博客等级 码龄18年 48粉丝 69原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值