• 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. }
  • 相关阅读:
    MySQL使用Xtrabackup备份到AWS存储桶
    【Java】泛型的理解与使用,包装类
    Android为什么不能在子线程更新UI
    半导体初创企业中的RISC-V
    剑指offer面试题28:对称的二叉树
    数字时代的新一代数据安全
    石油化工行业中低压电动机回路抗晃电解决方案
    XView 架构升级之路
    你们看过《点燃我,温暖你》没有呀,里面比较火的那个爱心代码,今天小编用Python实现啦,这就是程序员的烂漫吗
    linux 安装 RocketMQ 超详细教程(付安装包)
  • 原文地址:https://blog.csdn.net/qq_23852555/article/details/125551201