MCの生存游戏(洛谷P1867题题解,Java语言描述)

题目要求

P1867题目链接

在这里插入图片描述

分析

先解决2n的数值问题,就打表吧……

写个打表程序,覆盖long的数值范围:

public class Pow {
    public static void main(String[] args) {
        for (long i = 0; i <= 63; i++) {
            System.out.print((long)Math.pow(2, i) + "L,");
        }
    }
}

之所以写L,是因为普通数值默认int,加L表示是long,好管理……

先看看经验收益有多少。
能收获多少注意生命,生命大于0才有效……
注意一个问题:生命不能大于10,我开始WA了一次就是没注意这个问题,悲催……

算出收益以后就从小到大消耗经验就好了,能到哪步就到哪步,Fine……

AC代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        long[] pow_array = new long[] {1L,2L,4L,8L,16L,32L,64L,128L,256L,512L,1024L,2048L,4096L,8192L,
                16384L,32768L,65536L,131072L,262144L,524288L,1048576L,2097152L,4194304L,8388608L,16777216L,
                33554432L,67108864L,134217728L,268435456L,536870912L,1073741824L,2147483648L,4294967296L,
                8589934592L,17179869184L,34359738368L,68719476736L,137438953472L,274877906944L,549755813888L,
                1099511627776L,2199023255552L,4398046511104L,8796093022208L,17592186044416L,35184372088832L,
                70368744177664L,140737488355328L,281474976710656L,562949953421312L,1125899906842624L,
                2251799813685248L,4503599627370496L,9007199254740992L,18014398509481984L,36028797018963968L,
                72057594037927936L,144115188075855872L,288230376151711744L,576460752303423488L,1152921504606846976L,
                2305843009213693952L,4611686018427387904L,9223372036854775807L};
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt(), level;
        long exp = 0;
        double life = 10;
        for (int i = 0; i < num; i++) {
            life -= scanner.nextDouble();
            if (life <= 0) {
                break;
            } else if (life > 10) {
                life = 10;
            }
            exp += scanner.nextInt();
        }
        scanner.close();
        for (level = 0; level < pow_array.length; level++) {
            if (exp < pow_array[level]) {
                break;
            }
            exp -= pow_array[level];
        }
        System.out.println(level + " " + exp);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星拱北辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值