CF325B.Stadium and Games
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Daniel is organizing a football tournament. He has come up with the following tournament format:
- In the first several (possibly zero) stages, while the number of teams is even, they split in pairs and play one game for each pair. At each stage the loser of each pair is eliminated (there are no draws). Such stages are held while the number of teams is even.
- Eventually there will be an odd number of teams remaining. If there is one team remaining, it will be declared the winner, and the tournament ends. Otherwise each of the remaining teams will play with each other remaining team once in round robin tournament (if there are x teams, there will be
games), and the tournament ends.
For example, if there were 20 teams initially, they would begin by playing 10 games. So, 10 teams would be eliminated, and the remaining 10 would play 5 games. Then the remaining 5 teams would play 10 games in a round robin tournament. In total there would be 10+5+10=25 games.
Daniel has already booked the stadium for n games. Help him to determine how many teams he should invite so that the tournament needs exactly n games. You should print all possible numbers of teams that will yield exactly n games in ascending order, or -1 if there are no such numbers.
丹尼尔正在组织一场足球锦标赛。他设计了如下赛制:
- 在前若干轮(可能为零轮)中,只要参赛队伍数量为偶数,队伍就两两配对,每对进行一场比赛;每场比赛的负者被淘汰(无平局)。只要剩余队伍数为偶数,就持续进行这样的轮次。
- 最终剩余队伍数将变为奇数。若仅剩一支队伍,则该队直接被宣布为冠军,锦标赛结束;否则,所有剩余队伍将进行单循环赛(即每两支队伍之间恰好比赛一次;若剩余 x 支队伍,则共进行 2x(x−1) 场比赛),之后锦标赛结束。
例如,若初始有 20 支队伍,则首先进行 10 场比赛,淘汰 10 支队伍,剩余 10 支队伍;接着这 10 支队伍再进行 5 场比赛,淘汰 5 支队伍,剩余 5 支队伍;最后这 5 支队伍进行单循环赛,共 25×4=10 场比赛。总计比赛场数为 10+5+10=25 场。
丹尼尔已为该锦标赛预定了 n 场比赛的场馆。请帮助他确定应邀请多少支队伍,才能使锦标赛恰好进行 n 场比赛。你需要按升序输出所有满足条件的可能的队伍数量;若不存在任何满足条件的队伍数量,则输出 −1。
输入格式
The first line contains a single integer n (1 ≤ n ≤ 1018), the number of games that should be played.
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.
第一行包含一个整数 n(1≤n≤1018),表示应进行的比赛场数。
请注意,在 C++ 中读取或写入 64 位整数时,请勿使用 %lld 说明符。推荐使用 cin、cout 流,或 %I64d 说明符。
输出格式
Print all possible numbers of invited teams in ascending order, one per line. If exactly n games cannot be played, output one number: -1.
按升序输出所有可能的受邀队伍数量,每行一个数字。如果恰好无法进行 n 场比赛,则输出一个数字:-1。
输入输出样例
输入#1
3
输出#1
3 4
输入#2
25
输出#2
20
输入#3
2
输出#3
-1
输入解题思路,AI测评打分。不知道怎么写?