2017-2018 ACM-ICPC, Asia Daejeon Regional Contest H题
题目链接在这里
题目大意:
你要和电脑玩剪子包袱锤,你和电脑出的序列是固定的,比如你出的永远是RRRS,电脑永远出的是RRRRRRRRSSSS。你可以选择在电脑出第i轮时开始正式比赛,求你最多能获胜多少次。
比如如下这个情况:
电脑:RSPPSSSRRPPR
你:RRRR
在如下情况的时候,你赢的次数是最多的
题目分析:
设a表示电脑的序列,b表示你的序列,将电脑序列中你能赢的序列设为1,其它的设为0,b也是。
比方说,把b中为P的设为1,则a中为R的就为1
设f(i)表示在i点开始比赛时能赢的次数,那么
把b倒过来,就得到
上面就是卷积公式,可以用fft解决。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <complex>
using namespace std;
typedef long long ll;
typedef complex<double> cp;
const int MaxN = 1e6 + 10;
const double pi = acos(-1);
cp omg[MaxN], inv[MaxN];
char a[MaxN], b[MaxN];
cp aa[MaxN], bb[MaxN];
int ans[MaxN];
int m, n;void fft(cp *c, int n, int f) {for (int i = 0, j = 0; i < n; ++i) {if(i > j) swap(c[i], c[j]);for (int k = n >> 1; (j ^= k) < k; k >>= 1);}for (int i = 1; i < n; i <<= 1) {cp wn(cos(pi / i), f * sin(pi / i));for (int j = 0; j < n; j += i << 1) {cp w = 1;for (int k = 0; k < i; ++k, w *= wn) {cp t = w * c[i + j + k];c[i + j + k] = c[j + k] - t;c[j + k] += t;}}}if(f == -1) {for (int i = 0; i < n; ++i) c[i] /= n;}
}void kk(char ch) {int len = 1;while (len < m + n) len <<= 1;for (int i = 0; i < len; ++i) aa[i] = bb[i] = 0;for (int i = 0; i < m; ++i)if (ch == a[i]) aa[i] = 1; else aa[i] = 0;for (int i = 0; i < n; ++i)if (ch == b[i]) bb[i] = 1; else bb[i] = 0;fft(aa, len, 1);fft(bb, len, 1);for (int i = 0; i < len; ++i)aa[i] *= bb[i];fft(aa, len, -1);for (int i = 0; i < len; ++i)ans[i] += (int)(aa[i].real() + 0.5);
}void solve(){for (int i = 0; i < m; ++i) {if ('P' == a[i]) a[i] = 'S';else if ('S' == a[i]) a[i] = 'R';else if ('R' == a[i]) a[i] = 'P';}for (int i = 0; i < n / 2; ++i)swap(b[i], b[n - i - 1]);kk('P');kk('R');kk('S');int Max = 0;for (int i = n - 1; i < m + n - 1; ++i)Max = max(Max, ans[i]);printf("%d\n", Max);
}int main(){scanf("%d %d", &m, &n);scanf("%s %s", a, b);solve();return 0;
}
2017-2018 ACM-ICPC, Asia Daejeon Regional Contest H题相关推荐
- 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 补题
题目链接 http://codeforces.com/gym/101667 参考题解 B - Connect3 简要题意: 给定 4×44×44×4 的棋盘玩 Connect3Connect 3Con ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest C题
C题链接 题意:给一个无向图,每个点都有度,你只能从度小的点往度大的点跑,问能经过的最多点数. 思路:签到题,记忆化爆搜就行了. #include <bits/stdc++.h>using ...
- 2018 ICPC Asia Jakarta Regional Contest
2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest
2017-2018 ACM-ICPC, Asia Daejeon Regional Contest 题号 题目 难度 知识点 A Broadcast Stations B Connect3 C Gam ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest (大部分题解)
2017-2018 ACM-ICPC, Asia Daejeon Regional Contest ECFINAL PK赛. C 签到题. DAG上的dp. D 签到题. 根据数据范围可知暴力即可. ...
- 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest
文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...
最新文章
- 百度CTO王海峰:百度Paddle已支持超过70个主流的模型
- Kubernetes之路 1 - Java应用资源限制的迷思
- 如何在同一台电脑上同时运行2个tomcat
- mfc 怎么让键盘上下左右控制图片移动_[源码和文档分享]基于MFC的陨石撞飞机游戏设计与实现...
- 浅谈SQL Server数据库分页
- 自从掌握了Selenium自动化测试框架设计,我在公司都横着走!
- 双刃剑与灰色地带:“泄露数据收藏家”的素描
- JS高级——手写call()、apply()、bind()
- JSP 文件上传下载系列之一[基本方式上传文件]
- 表单出现提交两次的问题的解决
- 多任务学习Multi-Task Learning
- Android学习入门
- lpt监控安装_lpt1(如何在lpt1端口安装打印机)
- 广义线性模型的计算机应用技术学院,SPSS数据分析—广义线性模型
- Golang内存分配逃逸分析
- 没有json数据,自己造!mockjs的使用-模拟数据其实超级简单
- Arduino基础入门篇02—Arduino开发环境IDE安装使用
- python模拟登录12306_python模拟登录12306缺少cookies
- chrome无痕模式可访问但正常模式访问不了
- %md ,%0md ,%-md ,%m.nf