51nod2512 重排列得到2的幂 做题感悟

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

今天做了一道题,逝的,花费了114514%57257根头发,花费了生命中的不知道多长时间解决了一道题

老套路,先做题,再优化,这一优化,就出逝情了

题目:


小 b 有一个数 n ,现在她想把 n 的每一位重排列,使得得到的结果为 2 的幂次。

请问小 b 能得到 2 的幂次吗?

注意重排列后不允许有前导 0 。

样例解释: 46 重排列成 64 ,为 2^6 。

输入

输入一个数 N ,其中 1≤N≤10^9

输出

满足条件,输出 "true" ;

不满足,则输出 "false" 。

输入样例

46

输出样例

true


最近做题被时间复杂度折磨的遍体鳞伤,一看到这个题,1<=N<=10^9,脑瓜子就嗡嗡响,O(n^2)准保不行,O(nlog(n))可能够呛,O(n)才行,或者是O(log(n))、O(1)……(这里的n均为输入的N的长度)

我想了想,在牺牲了N/1e10根头发之后,第n反应就是:

把2的幂和输入进来的N的位数都排序了,(比如N=264836,排序之后N=234668),然后一个一个比就行了

后来又升级了以下这个想法:

把2的幂排序过的数打表,把N逐位排序再比对就行了

打表时,用下面这个程序跑了一下,然后……

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n=2;
    while(n<=1000000000){//n<=10^9
        cout << n << ",";
        n*=2;
    }
    return 0;
}

输出逝……

2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,

数了一下(对程序做了一点微小的改动,让电脑代劳),一共有……29个

29个……不多嘛……不多……不……等等,这么打表几乎没有降运行时间啊

那打表的意义何在???

蓑以,我就又思索了那么亿会,又牺牲了0x000000根头发后,脑中忽然蹦出了一个想法:

用map把N每一位的数字录入进去,再和2的幂一个一个比对,就可以做到O(1)解题了

我猛然想起,除了空间换时间,还可以键盘换时间

于是,就开干了

……

算了,先亮代码

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n,a;
    map<int,int> mp;
    cin >> n;
    a=n;
    while(n){
        mp[n%10]++;
        n/=10;
    }
    if (a==2||a==4||a==8||a==16||a==61||a==32||a==23||a==46||a==64) cout << "true";//2,4,8,16,32,64
    else if(mp[0]==0 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==0) cout << "true";//128
    else if(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==0) cout << "true";//256
    else if((mp[0]==0 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==0 && mp[2]==1 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==1 && mp[1]==0 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==1)) cout << "true";//512,1024,2048,4096
    else if((mp[0]==0 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==1)||(mp[0]==0 && mp[1]==1 && mp[2]==0 && mp[3]==1 && mp[4]==1 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==0 && mp[3]==1 && mp[4]==0 && mp[5]==2 && mp[6]==2 && mp[7]==0 && mp[8]==0 && mp[9]==0)) cout << "true";//8192,16384,32768,65536
    else if((mp[0]==1 && mp[1]==2 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==1 && mp[8]==0 && mp[9]==0)||(mp[0]==0 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==2 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==2 && mp[3]==0 && mp[4]==1 && mp[5]==1 && mp[6]==0 && mp[7]==0 && mp[8]==2 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==1 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==0)) cout << "true";//131072,262144,524288,1048576
    else if((mp[0]==0 && mp[1]==2 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==2 && mp[7]==3 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==1 && mp[4]==3 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==1)||(mp[0]==1 && mp[1]==0 && mp[2]==0 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==4 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==0 && mp[7]==1 && mp[8]==0 && mp[9]==1)) cout << "true";//16777216,2097152,4194304,838860
    else if((mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==3 && mp[4]==2 && mp[5]==2 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==2 && mp[7]==1 && mp[8]==2 && mp[9]==0)||(mp[0]==0 && mp[1]==2 && mp[2]==2 && mp[3]==1 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==2 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==1 && mp[4]==2 && mp[5]==2 && mp[6]==2 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==1 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==1)) cout << "true";//33554432,67108864,134217728,268435456,536870912
    else cout << "false";
    return 0;
}
//由于使用了键盘换时间的方法,敲代码的时候心神不宁,格式不太规整(本人就是强迫症,现在已经要疯掉了)

然后我就信心满满地提交了上去

然后就Wrong Answer了

然后发现只有一个测试项错了

然后就像维修那个世界上第一台计算机一样找bug

然后就没找出来

然后就随便试了一下

然后发现答案是true

然后就又是猛一激灵

发现2^0竟然也被这个缺德的出题人算进去了

所以

看客们

你们知道怎么改了嘛

算了,我还是把最后AC的代码放出来吧

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n,a;
    map<int,int> mp;
    cin >> n;
    a=n;
    while(n){
        mp[n%10]++;
        n/=10;
    }
    if (a==1||a==2||a==4||a==8||a==16||a==61||a==32||a==23||a==46||a==64) cout << "true";//1,2,4,8,16,32,64
    else if(mp[0]==0 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==0) cout << "true";//128
    else if(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==0) cout << "true";//256
    else if((mp[0]==0 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==0 && mp[2]==1 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==1 && mp[1]==0 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==1)) cout << "true";//512,1024,2048,4096
    else if((mp[0]==0 && mp[1]==1 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==1 && mp[9]==1)||(mp[0]==0 && mp[1]==1 && mp[2]==0 && mp[3]==1 && mp[4]==1 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==0 && mp[3]==1 && mp[4]==0 && mp[5]==2 && mp[6]==2 && mp[7]==0 && mp[8]==0 && mp[9]==0)) cout << "true";//8192,16384,32768,65536
    else if((mp[0]==1 && mp[1]==2 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==0 && mp[7]==1 && mp[8]==0 && mp[9]==0)||(mp[0]==0 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==2 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==2 && mp[3]==0 && mp[4]==1 && mp[5]==1 && mp[6]==0 && mp[7]==0 && mp[8]==2 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==1 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==0)) cout << "true";//131072,262144,524288,1048576
    else if((mp[0]==0 && mp[1]==2 && mp[2]==1 && mp[3]==0 && mp[4]==0 && mp[5]==0 && mp[6]==2 && mp[7]==3 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==1 && mp[4]==3 && mp[5]==0 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==1)||(mp[0]==1 && mp[1]==0 && mp[2]==0 && mp[3]==1 && mp[4]==0 && mp[5]==0 && mp[6]==1 && mp[7]==0 && mp[8]==4 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==2 && mp[3]==0 && mp[4]==0 && mp[5]==1 && mp[6]==0 && mp[7]==1 && mp[8]==0 && mp[9]==1)) cout << "true";//16777216,2097152,4194304,838860
    else if((mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==3 && mp[4]==2 && mp[5]==2 && mp[6]==0 && mp[7]==0 && mp[8]==0 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==0 && mp[3]==0 && mp[4]==1 && mp[5]==0 && mp[6]==2 && mp[7]==1 && mp[8]==2 && mp[9]==0)||(mp[0]==0 && mp[1]==2 && mp[2]==2 && mp[3]==1 && mp[4]==1 && mp[5]==0 && mp[6]==0 && mp[7]==2 && mp[8]==1 && mp[9]==0)||(mp[0]==0 && mp[1]==0 && mp[2]==1 && mp[3]==1 && mp[4]==2 && mp[5]==2 && mp[6]==2 && mp[7]==0 && mp[8]==1 && mp[9]==0)||(mp[0]==1 && mp[1]==1 && mp[2]==1 && mp[3]==1 && mp[4]==0 && mp[5]==1 && mp[6]==1 && mp[7]==1 && mp[8]==1 && mp[9]==1)) cout << "true";//33554432,67108864,134217728,268435456,536870912
    else cout << "false";
    return 0;
}

(这是本人发的第一篇文章,不喜勿喷)

西门子交换机环网冗余设置(实战篇2.2) MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备) 阅读详情

相关推荐

clock-gating整理

文章目录clock gating 理解1、latch双稳态器件常见锁存器结构SR锁存器D锁存器2、clock gating(clock low-active) latch + AND gating 电路(clock high-active)latch + OR gating 电路 clock gating 理解 1、latch 参考:https://www.cnblogs.com/IClearner/p/6443539.html 双稳态器件 稳定状态为0或1两种 举例:交叉耦合反相器 假设初始Q为1,则可

d_b_的博客 1万+

【51nod】2512 重排列得到2的幂

小b有一个数n,现在她想把n的每一位重排列,使得得到的结果为2的幂次。 请问小b能得到2的幂次吗? 注意重排列后不允许有前导0。 样例解释:46重排列成64,为2^6。 收起 输入 输入一个数N,其中1≤N≤10^9 输出 满足条件,输出“true”; 不满足,则输出“false”。 输入样例 46 输出样例 true 思路:这个题目要求的是经过了重新排...

红点雷龙XL 453

修改Avaya IP-Office电话交换机出厂自带的提示语音内容

1,本文的应用场景是在使用Avaya IP-office 500 v2电话交换机时,来电振铃超时后,会转入语音信箱,呼叫者会听到一条语音信箱留言的欢迎辞(…请留言…)。但我们单位情况比较特殊,首先是的IPO配置很精简,内嵌的语音信箱只能保留3天,用处不大;其次是用户没有收听语音信箱的习惯;第三是我们单位使用数字中继和DID,每人一个直拨号码,不通过总机转接。很多业务是单线联系,所以一旦来电无法接通,来电者可能完全无法联系到我们单位的其他同事。出于这三点原因,我们希望将语音信箱的欢迎辞,增加告知我们的总机电话

qlin4cn的博客 4917

51nod 2512 重排列得到2的幂 递归搜索

点击打开链接 #include<bits/stdc++.h> using namespace std; typedef long long LL; char s[15]; int cnt; LL solve[50]; bool done[15]; bool dfs(int c,char sol[]) { if(c==cnt) { sol[c]='\0'; ...

老铁,干了这碗algorithms的博客 250

同花顺自动化交易避坑指南:pywinauto实战中验证码识别与界面弹窗处理

本文深入探讨同花顺自动化交易中的关键稳定性问题,重点解决验证码识别与弹窗处理两大难题。通过优化Tesseract OCR、整合打码平台API以及设计pywinauto弹窗监控体系,提供了一套完整的自动化交易解决方案,帮助交易者有效规避资金账户和持仓信息操作中的常见陷阱。

weixin_33734785的博客 486

【无标题】 Python自动化法律文书撰写

Jinja2是一个功能强大的模板引擎,支持丰富的语法和功能。除了条件判断和循环语句外,Jinja2还支持过滤器、宏、继承等高级特性,非常适合处理复杂的文书模板。

master_chenchen的博客 2062

2512 重排列得到2的幂

2512 重排列得到2的幂 2 秒 262,144 KB 10 分 2 级题 小b有一个数n,现在她想把n的每一位重排列,使得得到的结果为2的幂次。 请问小b能得到2的幂次吗? 注意重排列后不允许有前导0。 样例解释:46重排列成64,为2^6。 收起 输入 输入一个数N,其中1≤N≤10^9 输出 满足条件,输出“true”; 不满足,则输出“false”。 ...

qq_41405278的博客 459

『杭电1199』Color the Ball

Problem Description There are infinite balls in a line (numbered 1 2 3 ....), and initially all of them are paint black. Now Jim use a brush paint the balls, every time give two integers a b and follow by a char 'w' or 'b', 'w' denotes the ball from a to

漠宸离若的博客 496

重排列得到2的幂(51Nod-2515)

题目 小b有一个数n,现在她想把n的每一位重排列,使得得到的结果为2的幂次。 请问小b能得到2的幂次吗? 注意重排列后不允许有前导0。 样例解释:46重排列成64,为2^6。 输入 输入一个数N,其中1≤N≤10^9 输出 满足条件,输出“true”; 不满足,则输出“false”。 输入样例 46 输出样例 true 思路:提前将 2^i 打好表,然后对于数字 n ...

Alex_McAvoy的博客 656

基于STC8G1K08A单片机的EC11旋转编码器控制(江科大同款,代码可直接使用)

本文介绍了STC8G系列单片机与EC11旋转编码器的接口实现方案。硬件方面详细说明了EC11编码器的机械结构、电气特性及与单片机的典型连接电路,包括上拉电阻和消抖设计。软件部分重点阐述了状态检测算法,通过状态机和查找表实现方向判断,采用中断方式检测信号变化,并配合定时器进行软件消抖处理。文章还提供了完整的代码实现,包括GPIO初始化、中断服务函数、状态转换逻辑等关键模块,展示了如何通过串口输出验证旋转计数。最后讨论了抗抖动优化、高低速应用场景等实际问题解决方案。该方案在菜单导航、参数调节等场景中具有实用价值

weixin_74013772的博客 322

18、探索隐私工程技术的前沿:从理论到实践

本文深入探讨了隐私工程技术的核心概念、关键技术及其应用场景,分析了加密技术、访问控制和用户界面设计等在隐私保护中的作用,并结合数据库保护、物联网设备等实际场景进行阐述。同时,文章还讨论了隐私工程技术面临的挑战与未来发展趋势,提出了数据最小化原则、差分隐私、隐私增强技术等优化策略以及隐私设计、隐私影响评估等最佳实践,最后展望了新兴技术对隐私保护的影响及法规推动下的发展方向。

weixin_35307279的博客 373

重新排序得到 2 的幂(暴力搜索)

class Solution { public: bool check(vector<int>&v){ if(v[0]==0) return false; int n=0; for(int i=0;i<v.size();i++) n=n*10+v[i]; return (n&(n-1))==0; } bool dfs(vecto.

weixin_47511190的博客 152

Android16 rk3576添加触摸点数上限到40个点

本文介绍了在Android 16系统上实现40点触摸支持的修改方案。相比Android 15,Android 16对API添加有更严格的要求,需要在MotionEvent.java中添加@FlaggedApi批注。主要修改包括:1)在input_framework.aconfig中定义flag;2)在MotionEvent.java中添加40个AXIS_GENERIC轴常量并添加批注;3)将32位指针ID处理改为64位适配;4)更新相关API文档。修改涉及多个核心文件,包括PointerController

tzj1058756809的博客 381

51nod-2512 重排得到2的幂 位运算判断是否为2的幂值

题目比较简单,只有一个小技巧,用位运算判断是否为2的幂值。 我们知道2的幂值二进制表示首位必为1,其余位全为零,而2的幂值-1与其恰好相反,即首位为零,其余位全为1,两者相与结果为0. 我比较懒用了全排列的方法做,效率比较低,如果想要加快运行速度,可以进行预处理,将数据范围内2的所有幂值存进数组,再按条件进行比较。 #include <iostream> #inclu...

BlueDoorZz的博客 432

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 167

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 270

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 553

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 17

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 643

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 156

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 80

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 311

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 150

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 390
方向Oyh
博客等级 码龄4年 1粉丝 1原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值