• 2022.11.8每日刷题打卡


    Dancing the Cheeky-Cheeky

    原题链接:传送门

    题意:

    多组数据,每组给出一个循环小数的小数部分,要求其 最长 循环节。

    输出循环节的后 8 位,后面加三个 "." 。

    当一个部分重复在其尾部出现,则认为是循环部分,如果没有循环节就把整体当做循环节。

    思路:kmp算循环节k,按照位置模拟输出8位

    1. #include
    2. using namespace std;
    3. int main(){
    4. ios::sync_with_stdio(false);
    5. cin.tie(nullptr);
    6. int t;
    7. cin >> t;
    8. while(t--) {
    9. string s;
    10. cin >> s;
    11. int n = s.size();
    12. vector<int> pi(n);
    13. for(int i = 1, j = 0; i < n; i++) {
    14. while(j && s[i] != s[j]) j = pi[j - 1];
    15. if(s[i] == s[j]) j ++;
    16. pi[i] = j;
    17. }
    18. int l = n - pi[n - 1];
    19. int k = n % l;
    20. for(int i = 0; i < 8; i++){
    21. int j = (k + i + l) % l;
    22. cout << s[j];
    23. }
    24. cout << "...\n";
    25. }
    26. return 0;
    27. }

     

     

    Secret Word

    原题链接:传送门

    题意:给出一个字符串S,求S的最长前缀,满足:其反转后的串是S的子串。

    思路:很简单我们把s做匹配串把s的反转串做模式串,以此进行匹配找最大长度就可。

    1. #include
    2. using namespace std;
    3. int main(){
    4. ios::sync_with_stdio(false);
    5. cin.tie(nullptr);
    6. int t;
    7. cin >> t;
    8. while(t--) {
    9. string s, rs;
    10. cin >> s;
    11. rs = s, reverse(rs.begin(),rs.end());
    12. int n = s.size();
    13. vector<int> pi(n, 0);
    14. for(int i = 1, j = 0; i < n; i++) {
    15. while(j && s[i] != s[j]) j = pi[j - 1];
    16. if(s[i] == s[j]) j ++;
    17. pi[i] = j;
    18. }
    19. int ans = 0;
    20. for(int i = 0, j = 0; i < n; i ++){
    21. while(j && rs[i] != s[j]) j = pi[j - 1];
    22. if(rs[i] == s[j]) j++;
    23. ans = max(ans, j);
    24. if(j == n) j = pi[j - 1];
    25. }
    26. string res = s.substr(0, ans);
    27. reverse(res.begin(), res.end());
    28. cout << res << "\n";
    29. }
    30. return 0;
    31. }

    MUH and Cube Walls

    原题链接:传送门

    题意:现有一个包含 n 个整数的序列 a1, a2, ..., an,和一个包含 m 个整数的序列 b1, b2, ..., bm

    问 a 序列中有多少个连续子序列,令每个数同时加上某个整数(可以为负数)后,与 b 序列相同?

    思路:差分+KMP

    1. #include
    2. using namespace std;
    3. int main(){
    4. ios::sync_with_stdio(false);
    5. cin.tie(nullptr);
    6. int n, m;
    7. cin >> n >> m;
    8. vector<int> a(n), b(m), sa(n), sb(m);
    9. for(int &ai : a) cin >> ai;
    10. for(int &bi : b) cin >> bi;
    11. if(m == 1) cout << n << "\n";
    12. else{
    13. for(int i = 1; i < n; i++) sa[i] = a[i] - a[i - 1];
    14. for(int i = 1; i < m; i++) sb[i] = b[i] - b[i - 1];
    15. vector<int> pi(m);
    16. for(int i = 2, j = 0; i < m; i++){
    17. while(j && sb[i] != sb[j + 1]) j = pi[j];
    18. j+=(sb[i] == sb[j + 1]), pi[i] = j;
    19. }
    20. int ans = 0;
    21. for(int i = 1, j = 0; i < n ; i++){
    22. while(j && sa[i] != sb[j + 1]) j = pi[j];
    23. j += (sa[i] == sb[j + 1]);
    24. if(j + 1 == m) ans ++, j = pi[j];
    25. }
    26. cout << ans << "\n";
    27. }
    28. return 0;
    29. }

     

  • 相关阅读:
    技术分享 | 常见接口协议解析
    Ocelot:.NET开源API网关提供路由管理、服务发现、鉴权限流等功能
    基于FFMPEG+SDL的简单的视频播放器分析
    【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering(分离对比协同过滤)
    Arduino驱动BMA220三轴加速度传感器(惯性测量传感器篇)
    尘封已久的功能!iPhone 15带来了一项早该使用的电池功能
    MYSQL——JBDC实现增删改查
    机器学习——逻辑回归算法
    Oracle数据库修改序列,Oracle中的主键值和序列中的值对应不上时的处理方式
    全网最详细Java-JUC
  • 原文地址:https://blog.csdn.net/weixin_62802134/article/details/127759359