时间优化:集合题记

简介: 1.题目描述:

1.题目描述:

给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA、BB、CC是用火柴棍拼出的整 
数(若该数非零,则最高位不能是00)。用火柴棍拼数字0-90−9的拼法如图所示:(我直接把对应的火柴 
数写出来了)
6,2,5,5,4,5,6,3,7,6
注意
加号与等号各自需要两根火柴棍
如果a!=b则A+B=CA+B=C与B+A=CB+A=C视为不同的等式(A,B,C>=0A,B,C>=0)
nn根火柴棍必须全部用上
输入格式:
一个整数n(n<=24)n(n<=24)。
输出格式:
一个整数,能拼成的不同等式的数目。
输入输出样例
输入 #1复制
14
输出 #1复制
2
输入 #2复制
18
输出 #2复制
9
说明/提示:
【输入输出样例1解释
22个等式为0+1=10+1=1和1+0=11+0=1
【输入输出样例2解释】
99个等式为:
0+4=4
0+11=11
1+10=11
2+2=4
2+7=9
4+0=4
7+2=9
10+1=11
11+0=11

分析:

结合下面的代码,我们慢慢分析,首先看备注释的部分代码,这部分代表直接计算0-24每一项所用到的火 
柴数,内层的循环中,1000的由来:按火柴数最少1111+1=1112在这时候所用到的数目是25,不符合范 
围,所以说4位数肯定不满足,所以我们a或者b的值遍历到1000就足够了。然后看下面代码的注释。
等到输出完之后,直接打表,就是下面的arr[25];
然后题目中输入a,就输出arr[a]。然后这道题就ac了。

源码:

#include <iostream>
using namespace std;
int pre[]={6,2,5,5,4,5,6,3,7,6};
int arr[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,9,6,9,29,39,38,65,88,128};
int main(void)
{
int n;
cin>>n;
cout<<arr[n]<<endl;
//  for(int n=0;n<=24;n++)
//  {
//      int arr=0;
//      for(int i=0;i<=1000;i++)
//      {
//          for(int j=0;j<=1000;j++)
//          {
//              int sum=0;
//              int a=i,b=j,c=i+j;
//              if(a==0) sum+=6;  //因为a或b或c为零时,不会进入while循环中
//              if(b==0) sum+=6;
//              if(c==0) sum+=6;
//              while(a)
//              {//这个循环中就是基本的每位用到的火柴数
//                  sum+=pre[a%10];
//                  a=a/10;
//              }
//              while(b)
//              {
//                  sum+=pre[b%10];
//                  b=b/10;
//              }
//              while(c)
//              {
//                  sum+=pre[c%10];
//                  c=c/10;
//              }
//              if(sum==n-4)//sum没有算加号和等号一共4根。
//              {
//                  arr++;
//              }
//          }
//      }
//      cout<<arr<<',';//输出每一项的火柴数所能配成的等式。
//  }
return 0;
}

2.题目:

给定n个数,让你求这n个数的阶乘和对1e9+7取余为多少?
1<=n<=1e6
1<=a[i]<=1e5

分析:

直接计算的时间复杂度为O(n*m),其中m为max(a[i]),即1e11.

解决办法:

1.那没一个数的阶乘给存下来,a[i]代表的是i的阶乘对mod取余的结果。
2.可以通过O(max(a[i]))的时间复杂度求解出所有数的阶乘并存到a数组里。
3.对于每一次,我们输入x,那么对应的阶乘值就是a[x]。
4.这样实现每一次计算的复杂度为O(1)。
5.总体时间复杂度为O(n+max(a[i]))。

源码:

#include <iostream>
using namespace std;
const int mod=1e9+7;
const int maxn=1e5+9;
long long pre[maxn];
int main()
{
    pre[1]=1;
for(int i=2;i<=100000;i++)
    {
        pre[i]=pre[i-1]*i;
        pre[i]=pre[i]%mod;
    }
int n;
cin>>n;
long long ans=0;
while(n--)
    {
int x;
cin>>x;
        ans+=pre[x];
        ans%=mod;
    }
cout<<ans<<endl;
return 0;
}


目录
相关文章
|
9月前
|
人工智能 自然语言处理 安全
Serverless AI 原生架构破局「三高」困境
在 AI 大模型浪潮席卷全球的今天,企业纷纷加速拥抱 AI,推动智能客服、内容生成、流程自动化等场景快速落地。然而,许多企业在实践中却遭遇了“三高困境”——成本高、复杂度高、风险高。Serverless AI 原生架构不仅是技术演进,更是企业智能化转型的关键基础设施。它让开发者聚焦业务逻辑,让企业告别“基建焦虑”,让 AI 真正“飞入寻常百姓家”。
|
2月前
|
人工智能 Linux 开发者
OpenCode AI编程Agent完整配置保姆级手册:阿里云通义千问、Ollama本地部署实战
OpenCode是一款终端优先、模型中立、本地优先开源AI编程Agent,区别于传统对话式AI代码工具。传统Chat类工具仅能完成一问一答,代码需要人工复制粘贴整合;OpenCode具备完整项目感知、任务自主规划、文件批量修改、终端命令执行、改动审查闭环能力,能够接收自然语言开发目标,全自动完成整套编码任务,真正实现“输入需求,AI写完代码”。产品开源生态数据显示,当前GitHub星标超17万,月度活跃开发者750万,支持75款以上大模型无缝切换,覆盖海外闭源模型、国内云大模型、本地离线模型三大类,适配国内开发者网络与合规需求。
713 0
|
机器学习/深度学习 人工智能 自然语言处理
清华EconAgent获ACL 2024杰出论文:大模型智能体革新计算经济学研究范式
近年来,人工智能的迅猛发展推动了数据驱动建模在宏观经济学领域的应用。清华大学研究团队提出的EconAgent模型,基于大型语言模型,具备类似人类的决策能力,能更准确地模拟个体行为对宏观经济系统的影响。EconAgent在个体异质性、市场动态及宏观经济因素模拟方面表现出色,并具有更好的可解释性和灵活性。然而,其高计算复杂度和部分决策过程的不透明性仍需进一步解决。该成果已在ACL 2024会议上获得杰出论文奖。论文链接:https://arxiv.org/abs/2310.10436v4
750 3
|
Ubuntu 数据库
解决Ubuntu系统获取锁失败的问题
不过记住,这种方式有如凤凰涅槃,万不得已时才使用。这样,繁琐的锁定问题就被巧妙解决了。从此,当你再次面对这类状况时,就能秉持锁匠之智,轻松应对。
536 23
|
7月前
|
安全 数据安全/隐私保护
2026阿里云账号注册流程(以企业用户为例)注册材料、实名认证、企业上云补贴及问题解答FAQ
企业用户注册阿里云账号仅需手机号,注册后须完成实名认证方可使用。本文详解2026年最新企业账号注册、支付宝扫码快速认证流程及常见问题,助力企业高效上云,享最高百万出海补贴。
722 9
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
448 0
|
JSON 安全 Serverless
MCP Server 之旅第 2 站: 从 0 到 1 - MCP Server 市场构建与存量 OpenAPI 转 MCP Server
本文聚焦MCP协议在企业应用中的两大核心痛点:如何将社区主流STDIO MCP Server一键转为可插拔Remote MCP Server,以及如何实现存量OpenAPI向MCP Server的智能化转型。文章通过具体示例,展示了基于函数计算和协议转译Adapter的解决方案,支持npm/pip生态,实现零改造一键迁移,大幅降低成本。
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
1270 38
|
前端开发 Java 测试技术
Spring、SpringMVC、SpringBoot、SpringCloud 框架常用注解说明
Spring、SpringMVC、SpringBoot、SpringCloud 框架常用注解说明
1051 1

热门文章

最新文章