首页 > 编程语言 >算法题:ID数量

算法题:ID数量

时间:2024-10-09 15:22:05浏览次数:6  
标签:scanner int 数量 算法 Scanner ID dp mod

目录

注意

在何处取余不影响结果正确性?
对乘法和加法的运算表达式里取余都不会,因为有取模运算的分配律

(a * b) mod m = [(a mod m) * (b mod m)] mod m
(a * b) mod m = [(a mod m) * (b mod m)] mod m

题目描述

大学生小名设计了一种语言,他的语言最大支持N个字不同的字符,
并且他规定了由这些字符组成的ID,任何ID的长度需要大于等于1月小于等于L个字符,
他希望设计一个程序,计算他的语言总共能组成多少个ID

例如,当N=2(假设字符可以是0或1),并且L=3时,他具有如下的ID:{0,1,00,01,10,11,000,001,010,011,100,101,110,111},因此当N=2,L=3时总共有14种
ID。你需要编写一个程序,可以帮助小明找到可能的ID的总数

由于答案可能非常大,最后的结果需要对1000000007取余。

示例

输入

2 3
100 15
0 0

输出

14
979451521

Java解答

import java.util.Scanner;

public class CompilerLanguageIDCounter {
    private static final int MOD = 1000000007;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int N = scanner.nextInt();
            int L = scanner.nextInt();
            if (N == 0 && L == 0) {
                break;
            }
            System.out.println(countIDs(N, L));
        }
        scanner.close();
    }

    private static long countIDs(int N, int L) {
        // dp[i] 表示长度为 i 的ID的数量
        long[] dp = new long[L + 1];
        dp[1] = N; // 长度为1的ID有N个

        // 计算长度从2到L的所有ID数量
        for (int i = 2; i <= L; i++) {
            dp[i] = (dp[i - 1] * N) % MOD;
        }

        // 累加所有长度的ID数量
        long total = 0;
        for (long count : dp) {
            total = (total + count) % MOD;
        }

        return total;
    }
}

标签:scanner,int,数量,算法,Scanner,ID,dp,mod
From: https://www.cnblogs.com/xiu1zi3/p/18454367

相关文章

  • LED显示驱动/高亮数显屏驱动芯片VK16K33A 采用SOP28封装形式,可支持16SEGx8GRID的点阵L
    VK16K33A是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,邱婷:188-2366-8825内部集成有数据锁存器、键盘扫描、LED驱动模块等电路。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳极,GRID脚接LED阴极,可支持16SEGx8GRID的点阵LED显示面板。最大支持13×3的按键。内置上电......
  • 【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路
    操作环境:MATLAB2022a1、算法描述孔雀优化算法(PeafowlOptimizationAlgorithm,简称POA)以孔雀(peafowl)的求偶展示行为为灵感,通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化算法的详细描述:孔雀优化算法是一种基于自然界中孔雀求偶展示行为的群体智能优化算法。孔雀......
  • 总奖金高达10万元!华为算法精英实战营“亲和任务调度系统”来啦!
    随着物联网、大数据、AI时代的到来,时延、可靠性等指标要求越来越高,海量的数据分析、大量复杂的运算对CPU的算力要求越来越高。CPU内部的大部分资源用于缓存和逻辑控制,适合运行具有分支跳转、逻辑复杂、数据结构不规则、递归等特点的串行程序。在集成电路工艺制程将要达到极限,摩尔......
  • 揭秘!尤雨溪成立的VoidZero如何改变前端世界
    前言Vue和Vite之父尤雨溪宣布成立公司VoidZero,目前已经融资3200万。这篇文章欧阳将带你了解VoidZero是如何改变javascript的世界!关注公众号:【前端欧阳】,给自己一个进阶vue的机会痛点1:工具太多,学不动公司项目一般是多人维护,为了保证大家写出来的代码风格一致,以及在coding......
  • 排序算法之选择排序
    选择排序的思想是每次从未排序的部分中选择最小的元素,然后将其放在已经排序部分的末尾。遍历数组,从第一个元素开始,将其视为当前最小元素。在未排序的部分中,找到最小的元素,并记录其索引。将最小的元素与当前位置的元素交换位置重复步骤2和步骤3,直到遍历完整个数组比如有一......
  • IDC服务器未知原因故障解决方法
    一、维修思路   在用户反馈的报修工单和BMClog中大致都能判断、定位出产生问题的故障部件,我们就可以直接对故障部件进行维修或更换。   但在维修未知原因的的故障时,要遵循从简到难、从外而内、从软及硬的方法逐步判断、定位故障,要有一个清晰的思路。我们应该遵循一个......
  • 代码随想录算法训练营第九天|344.反转字符串, 541. 反转字符串II,卡码网:54.替换数字
    344.反转字符串反转字符串比较简单,除了用reverse,可以用for循环,两头向中间夹,进行swapclassSolution{public:voidreverseString(vector<char>&s){inthalf=s.size()/2;intlength=s.size();for(inti=0,j=length-1;i<half;i++,j--){......
  • IntelliJ IDEA(IDEA)下无法解析 ApplicationContext 中的方法 getBean
    只需要:删除过程目录下的.idea文件后,关闭IDEA,再重新打开IDEA即可解决“getBean”报红问题。(注意:前提是要保证有依赖(Spring核心库配置正确、依赖版本兼容)、配置正确(ApplicationContext 创建正确、有 Bean定义、扫描包正确)、编码问题(导入正确的类、方法调用正确))以上原理:.i......
  • 随机算法
    算法导论这个文档是学习“算法设计与分析”课程时做的笔记,文档中包含的内容包括课堂上的一些比较重要的知识、例题以及课后作业的题解。主要的参考资料是Introductiontoalgorithms-3rd(ThomasH.)(对应的中文版《算法导论第三版》),除了这本书,还有的参考资料就是Algorithmsdesi......
  • sld样式之根据id展示不同样式,大于10000展示标注
    sld样式之根据id展示不同样式,大于10000展示标注<?xmlversion="1.0"encoding="GBK"?><sld:StyledLayerDescriptorxmlns="http://www.opengis.net/sld"xmlns:sld="http://www.opengis.net/sld"xmlns:gml="http://www.opengis.net/......