ABC365(D,E)

D - AtCoder Janken 3

  • 石头剪刀布,给出对手的出招,问在保证不败的情况下最多能赢多少回
  • 记 \(f_i,{0/1/2}\) 表示第 \(i\) 局出石头/剪刀/布 , 累计最多赢了多少回回, 直接转移即可
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
using namespace std;
using ll = long long;
const int N = 5e5 + 105;
const int inf = 0x3f3f3f3f;
int n;
int f[N][5],g[N];
char s[N];
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>s;
F(i,0,n-1){
if(s[i] == 'R') g[i + 1] = 0;
else if(s[i] == 'S') g[i + 1] = 1;
else if(s[i] == 'P') g[i + 1] = 2;
}
F(i,1,n) f[i][0] = f[i][1] = f[i][2] = -inf;
F(i,1,n){
if(g[i] == 0){
f[i][2] = max( f[i-1][0] , f[i-1][1] ) + 1;
f[i][0] = max( f[i-1][2] , f[i-1][1] );
}
else if(g[i] == 1){
f[i][0] = max( f[i-1][1] , f[i-1][2] ) + 1;
f[i][1] = max( f[i-1][0] , f[i-1][2] );
}
else if(g[i] == 2){
f[i][1] = max( f[i-1][0] , f[i-1][2] ) + 1;
f[i][2] = max( f[i-1][0] , f[i-1][1] );
}
}
cout << max({ f[n][0] , f[n][1] , f[n][2] }) << "\n";
return 0;
}

E - Xor Sigma Problem

  • 求给定序列所有连续子串(长度大于1)异或和的总和
  • 拆位计算 + 前缀异或和
  • 考虑拆位计算,对于一个区间如果异或和的第 \(k\) 位是1, 说明有奇数个数这一位是1.
  • 进而想到维护特定区间某一位出现的1的个数.
  • 因为总情况数是 \(O(n^2)\), 所以我们不能一个个求, 但可以用前缀异或和覆盖所有区间, 特定区间1或0的个数同样可以用两个前缀和相减得到.
  • 所以先求前缀异或和, 然后对于当前 \(i\), 统计第 \(k\) 位和 \(pre[i]\) 不一样的在 \(pre[1 \sim i-1]\) 中有多少个, 总和记为 \(cnt[k]\).
  • 最后 \(ans = \sum_{i=0}^{30} 2^i \times cnt[k]\).
  • 当然由于子串长度要大于 1, 再减去 \(\sum a[i]\) 即可.
  • 时间复杂度 \(O(NlogA)\). (代码奇短! ! !)
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
using namespace std;
using ll = long long;
const int N = 3e5 + 105;
const int inf = 0x3f3f3f3f;
int n;
int a[N],num[33][2];
ll ans = 0;
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n; F(i,1,n) cin>>a[i] , a[i] ^= a[i-1] ;
F(i,0,30){ll cnt=0; num[i][0] = 1;
F(j,1,n) cnt += num[i][(((a[j] >> i) & 1) ^ 1)],num[i][((a[j] >> i) & 1)] ++ ;
ans += (1ll<<i) * cnt;
} return cout << ans << "\n",fflush(0),0;
}

随机推荐

  1. TCP/IP协议竟然有这么多漏洞?

    据2020年上半年中国互联网网络安全监测数据分析报告显示,恶意程序控制服务器.拒绝服务攻击(DDoS)等网络攻击行为有增无减.时至今日,网络攻击已经成为影响网络信息安全.业务信息安全的主要因素之一. ...

  2. T113s工业套件简述

    T113s工业套件简述 提示 T113开发交流QQ群:120575746 此开发板的任何问题都可以在我们的论坛交流讨论 https://forums.100ask.net/c/aw/ 硬件简述​ 10 ...

  3. 使用python-slim镜像遇到无法使用PostgreSQL的问题

    前言 之前不是把 DjangoStarter 的 docker 方案重新搞好了吗 一开始demo部署是使用 SQLite 数据库的,用着没问题,但很快切换到 PostgreSQL 的时候就遇到问题了- ...

  4. XSS 基本概念和原理介绍

    XSS 基本概念和原理介绍 基本概念 跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表 ( Cascading Style Sheets,CSS ) 的缩写混淆,故 ...

  5. kubernetes删除ns异常状态为:Terminating

    在部署kuboard控制平台的时候,不规范删除,导致ns状态为Terminating [root@master01 ~]# kubectl delete namespace kuboard ^C ro ...

  6. Serilog文档翻译系列(一) - 入门指南

    保持优质文档是 Serilog 的优先事项.如果你发现文档中有缺失或不准确的内容,或者希望通过添加主题或教程来扩展 wiki,请通过问题追踪系统告知我们. 为什么选择Serilog? 与许多其他 .N ...

  7. MYSQL数据库设计1

    简单记录一下如何设计MySQL数据库 1.画出概念模型,概念模型是一个业务关系对照图,不需要定义字段类型什么的,仅仅是用于关系对照,指出对照关系 2.根据概念模型设计逻辑模型,逻辑模型需要包含字段的设 ...

  8. Flutter Engage China 开发者常见问题解答 | 上篇

    再次感谢大家对 Flutter Engage China 活动 的关注和积极参与!我们在活动前后收到了很多来自开发者的反馈和问题,Flutter 团队和演讲嘉宾在直播 Q&A 环节中也针对部分 ...

  9. markdown公式关系符

  10. foobar2000 v2.1.5 汉化版(更新日期:2024.09.08)

    foobar2000 v2.1.5 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...