可达鸭2023国庆CSP-J复赛集训第4天补题报告

可达鸭2023国庆CSP-J复赛集训第4天补题报告

  • 1 复读机

    • 赛中分数

      100

    • 赛中概况

      花1小时写了个正解, 然后老师说有一种奇特的写法, 我当时猜了个regex, 还真的猜对了…

    • 题目意思

      遍历给定的字符串s, 遇到字母就放进字符串ans, 遇到数字就让x *= 10, 然后x += [这个数字], 在下一次遇到字母时就ans = ans * x(这个操作并不是C++包含的, Python可以使用这个操作, 这里的意思是把ans复读x遍, 然后把复读后的结果赋值给ans).

    • 题目思路

      模拟.

    • AC代码

      #include <iostream>
      using namespace std;
      
      int main()
      {
             
          int t;
          cin >> t;
          while (t--)
          {
             
              int n;
              string s;
              cin >> n >> s;
              int x = 0;
              bool flag = true;
              string tmp,ans;
              for (int i = 0;i < n;i++)
              {
             
                  if (s[i] >= 'a' && s[i] <= 'z')
                  {
             
                      if (!flag)
                      {
             
                          for (int i = 1;i <= x;i++)
                          {
             
                              tmp += ans;
                          }
                          x = 0;
                          ans = tmp;
                          tmp = "";
                          flag = true;
                      }
                      ans += s[i];
                  }
                  else
                  {
             
                      if (flag)
                      {
             
                          x = 0;
                          flag = false;
                      }
                      x *= 10;
                      x += s[i] - '0';
                  }
              }
              x--;
              if (x >= 1)
              {
             
                  tmp = ans;
                  for (int i = 1;i <= x;i++)
                  {
             
                      tmp += ans;
                  }
                  ans = tmp;
              }
              cout << ans << '\n';
          }
          return 0;
      }
      
  • 2 小可的矛与盾

    • 赛中分数

      70

    • 赛中概况

      没开long long, 开了能拿90分, minn特殊处理后100分.

    • 题目意思

      求一个pos, 让1 ~ pos的矛攻击力总和与pos + 1 ~ n的盾防御力总和之差的绝对值最小.

    • 题目思路

      前缀和 + 枚举, 注意求minnminn初始值为max(sum1[n],sum2[n]), 因为这是最极限的情况, 如果minn初始值设为1e18等值, 最后一个for循环范围应该是0 ~ n + 1.

    • AC代码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值