Loading

CF1495E Qingshan and Daniel

场上不到半小时就过了,感觉这题的难度取决于它是第几题。。

首先注意到加起来小的阵营会把牌打完,现在考虑小阵营对大阵营的贡献。

每个小阵营机器人必然会以顺时针的方向对后面的大阵营机器人做贡献,那么我们直接绕着环跑两圈,记录当前小阵营打出的牌数和往后做贡献就行了,至于为啥要跑两圈是因为第一圈可能没贡献干净。

时间复杂度 O(n)

代码:

int main () {
  // freopen ("1.in", "r", stdin);
  // freopen ("1.out", "w", stdout);
  n = rd (), m = rd ();
  rep (i, 1, m) p[i] = rd (), k[i] = rd (), b[i] = rd (), w[i] = rd ();
  generate ();
  ll s[2] = {0, 0};
  rep (i, 1, n) s[t[i]] += a[i];
  ll now (0);
  bool o (s[0] > s[1]);
  if (t[1] != o) ++ ans[1], -- a[1];
  rep (i, 1, n) {
    if (t[i] == o) now += a[i], ans[i] += a[i], a[i] = 0;
    else {
      if (now >= a[i]) ans[i] += a[i], now -= a[i], a[i] = 0;
      else ans[i] += now, a[i] -= now, now = 0;
    }
  }
  rep (i, 1, n) {
    if (t[i] == o) now += a[i], ans[i] += a[i], a[i] = 0;
    else {
      if (now >= a[i]) ans[i] += a[i], now -= a[i], a[i] = 0;
      else ans[i] += now, a[i] -= now, now = 0;
    }
  }
  ll ret (1);
  rep (i, 1, n) ret = (ret * (((1ll * i * i) ^ ans[i]) % P + 1)) % P;
  cout << ret;
}

作者:lalaouye

出处:https://www.cnblogs.com/lalaouyehome/p/18739535

版权:本作品采用「114514」许可协议进行许可。

posted @   lalaouye  阅读(0)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示