• 笔试强训Day13


    T1:跳石板
     

    [小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......
    这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
    例如:
    N = 4,M = 24:
    4->6->8->12->18->24
    于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板

     

    从n开始,求出n的所有约数xi(根号n的复杂度),对于n能跳到n+xi,对该状态转移,方程是:

    f[n+xi]=min(f[n+xi],f[n]+1) 然后对于n+1到m重复此算法。

    时间复杂度:O(n*sqrt(n))

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int N=1e5+10,INF=0x3f3f3f3f;
    6. int f[N];
    7. int n,m;
    8. vector<int> fun(int x)
    9. {
    10. vector<int>ans;
    11. for(int i=2;i*i<=x;i++){
    12. if(x%i==0){
    13. ans.push_back(i);
    14. if(i!=x/i){
    15. ans.push_back(x/i);
    16. }
    17. }
    18. }
    19. return ans;
    20. }
    21. int main()
    22. {
    23. cin>>n>>m;
    24. memset(f,0x3f,sizeof(f));//初始化 0x3f3f3f3f是正无穷
    25. f[n]=0;
    26. for(int i=n;i<=m;i++){
    27. if(f[i]!=INF){
    28. vector<int>ans=fun(i);//求约数
    29. for(int x:ans){
    30. if(i+x<=m){
    31. f[i+x]=min(f[i+x],f[i]+1);
    32. }
    33. }
    34. }
    35. }
    36. if(f[m]==INF)cout<<-1<
    37. else cout<
    38. return 0;
    39. }

    T2:参数解析

    链接:参数解析__牛客网

    题目描述:

    在命令行输入如下命令:

    xcopy /s c:\\ d:\\e,

    各个参数如下:

    参数1:命令字xcopy

    参数2:字符串/s

    参数3:字符串c:\\

    参数4: 字符串d:\\e

    请编写一个参数解析程序,实现将命令行各个参数解析出来。

    解析规则:

    1.参数分隔符为空格
    2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\program files,而不是C:\\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。
    3.参数不定长

    4.输入由用例保证,不会出现不符合要求的输入

    数据范围:字符串长度:1≤s≤1000 

    进阶:时间复杂度:O(n) ,空间复杂度:O(n) 

    模拟题,注意读入用getline

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. vectorans;
    6. string s;
    7. int main()
    8. {
    9. getline(cin,s);
    10. s+=" ";
    11. bool flag=0;
    12. string temp;
    13. for(int i=0;isize();i++){
    14. if(s[i]==' '&&!flag){
    15. ans.push_back(temp);
    16. temp="";
    17. }
    18. else if(s[i]=='"'){
    19. if(!flag) flag=1;
    20. else flag=0;
    21. }
    22. else temp+=s[i];
    23. }
    24. cout<size()<
    25. for(auto x:ans){
    26. cout<
    27. }
    28. return 0;
    29. }

  • 相关阅读:
    分布式系统架构理论与组件
    <git>如何快速上手并高效协同
    Docker的基础命令
    这就是思维导图!全面分析思维导图的实际用途
    车轮上的智能:探索机器学习在汽车行业的应用前景
    TouchGFX界面开发 | 图像控件应用示例
    4.0、软件测试——等价类划分以及练习
    HashMap的几个常考的[ 面试问题 ]和[ 回答思路,底层分析 ]
    如何备战Shopee大促活动?有什么技巧?
    Flutter经验整理
  • 原文地址:https://blog.csdn.net/m0_64263546/article/details/133591807