码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • P1050 [NOIP2005 普及组] 循环 day16


     又是一道题做了几个小时

    非常痛苦啊!

    其实我最开始就理解了题意 可是就是一直没想到要和原数组乘一下才行

    非常弱智啊!!!

    这道题其实真的非常简单

    我们可以按位来获取每一位复原需要的步数

    然后乘起来就 错误 了!!!

    其实题解十次怎么来的我也不知道

    最开始以为用容斥定理可以证明其有一个循环

    但是我打表发现并不是这样

    12^n 10以内第二位都不是1 而 第15位是1

    这样我们就不得不把我们的v1更新成v2 也就是带上之前算的位数

    然后来加判断是否

    其实类似于迭代加深

    但是10是猜的

    可是我们要注意的一点就是

    无论你需要多少的步数 都是在原来的基础上 加上 乘起来的步数来check

    1. #include <bits/stdc++.h>
    2. using namespace std;
    3. const int N = 18;
    4. const int M = 1e4+10;
    5. const int mod = 1e9+7;
    6. #define int long long
    7. #define endl '\n'
    8. #define Endl '\n'
    9. #define inf 0x3f3f3f3f3f3f3f3f
    10. #define fast ios::sync_with_stdio(false);cin.tie(nullptr);
    11. int max(int x,int y){return x>y?x:y;}
    12. int min(int x,int y){return x<y?x:y;}
    13. vector<int> mul(vector<int> A, vector<int> B,int r){
    14. vector<int> C(A.size() + B.size());
    15. for (int i = 0; i < A.size(); i ++ )
    16. for (int j = 0; j < B.size(); j ++ )
    17. C[i + j] += A[i] * B[j];
    18. for (int i = 0, t = 0; i < C.size() || t; i ++ ){
    19. t += C[i];
    20. if (i >= C.size()) C.push_back(t % 10);
    21. else C[i] = t % 10;
    22. t /= 10;
    23. }
    24. while (C.size() > 1 && !C.back()) C.pop_back();
    25. while(C.size()>r)C.pop_back();
    26. return C;
    27. }
    28. signed main() {
    29. fast
    30. string s; cin >> s;
    31. vector<int> v;
    32. int k; cin >> k;
    33. int n = s.size();
    34. for (int i = n - 1; i >= n - k; i--)v.push_back(s[i] - '0');
    35. vector<int> v1 = v;
    36. vector<int> v2 = v;
    37. vector<int> ans;
    38. ans.push_back(1);
    39. for (int i = 0; i < k; i++) {
    40. if(mul(v,v2,k)[i]==v[i])continue;
    41. int u=1;
    42. do{
    43. v2=mul(v1,v2,k),++u;
    44. if(u>10){cout<<-1<<endl;return 0;}
    45. }while(mul(v,v2,k)[i]!=v[i]);
    46. v1=v2;
    47. vector<int>v3;
    48. v3.push_back(u);
    49. ans=mul(ans,v3,1e9);
    50. }
    51. for(int i=ans.size()-1;i>=0;i--)cout<<ans[i];
    52. return 0^0;
    53. }
  • 相关阅读:
    每日一题(LeetCode)----数组--移除元素(三)
    数据库系统原理与应用教程(075)—— MySQL 练习题:操作题 151-159(十九):综合练习
    【C++】类和对象(中)
    Godot 官方2D C#重构(3):TileMap使用
    flink postgre UUID
    知乎日报第四周总结
    创邻科技获评环紫金港创新生态圈智源创新企业
    LVS-DR模式+keepalived+nginx+tomcat实现动静分离、负载均衡、高可用实验
    【PAT甲级 - C++题解】1104 Sum of Number Segments
    鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput
  • 原文地址:https://blog.csdn.net/qq_23852555/article/details/125551201
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号