Content

有 \(2\) 个人在玩石头剪刀布,已知他们的出手都有一定的规律,求 \(n\) 局之后两个人各输了几局。

数据范围:\(1\leqslant n\leqslant 2\times 10^9\),周期长度不超过 \(10^3\)。

Solution

一个一个模拟肯定不现实,会 TLE,所以我们应当考虑是否有更快速的方法。

我们设第一个人的周期长度为 \(a_1\),第二个人的周期长度为 \(a_2\),则很容易发现,在 每 \(\operatorname{lcm}(a_1,a_2)\) 局里面,他们输的局数是固定的,因为他们正好能够做完整数个周期,而且可以证明 \(\operatorname{lcm}(a_1,a_2)<10^6\),所以我们考虑将一个周期里面每局的情况都统计出来,如果能凑出 \(\operatorname{lcm}(a_1,a_2)\) 局出来,就计算有多少个 \(\operatorname{lcm}(a_1,a_2)\) 局,显然有 \(\left\lfloor\dfrac{n}{\operatorname{lcm}(a_1,a_2)}\right\rfloor\) 个,直接拿两个人在每 \(\operatorname{lcm}(a_1,a_2)\) 局里面输的次数乘上 \(\left\lfloor\dfrac{n}{\operatorname{lcm}(a_1,a_2)}\right\rfloor\),再加上他们剩下来的几局中的输的次数即可。

Code

string s1, s2;
int n, loses[1000007], loset[1000007], lose1, lose2, ans1, ans2; inline int gcd(int a, int b) {return !b ? a : gcd(b, a % b);}
inline int lcm(int a, int b) {return a / gcd(a, b) * b;} //NOIP2020T1 血的教训 int main() {
n = Rint; str(s1, len1); str(s2, len2);
int round = lcm(len1, len2);
F(i, 0, round - 1) {
if((s1[i % len1] == 'R' && s2[i % len2] == 'P') || (s1[i % len1] == 'P' && s2[i % len2] == 'S') || (s1[i % len1] == 'S' && s2[i % len2] == 'R'))
loses[i + 1]++, lose1++;
if((s2[i % len2] == 'R' && s1[i % len1] == 'P') || (s2[i % len2] == 'P' && s1[i % len1] == 'S') || (s2[i % len2] == 'S' && s1[i % len1] == 'R'))
loset[i + 1]++, lose2++;
}
F(i, 1, n % round) ans1 += loses[i], ans2 += loset[i];
return printf("%d %d", ans1 + lose1 * (n / round), ans2 + lose2 * (n / round)), 0;
}

CF173A Rock-Paper-Scissors 题解的更多相关文章

  1. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  2. 【题解】CF1426E Rock, Paper, Scissors

    题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...

  3. 题解 CF1426E - Rock, Paper, Scissors

    一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...

  4. SDUT 3568 Rock Paper Scissors 状压统计

    就是改成把一个字符串改成三进制状压,然后分成前5位,后5位统计, 然后直接统计 f[i][j][k]代表,后5局状压为k的,前5局比和j状态比输了5局的有多少个人 复杂度是O(T*30000*25*m ...

  5. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...

  6. Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数

    Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...

  7. Gym101667 H. Rock Paper Scissors

    将第二个字符串改成能赢对方时对方的字符并倒序后,字符串匹配就是卷积的过程. 那么就枚举字符做三次卷积即可. #include <bits/stdc++.h> struct Complex ...

  8. HDOJ(HDU) 2164 Rock, Paper, or Scissors?

    Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...

  9. HDU 2164 Rock, Paper, or Scissors?

    http://acm.hdu.edu.cn/showproblem.php?pid=2164 Problem Description Rock, Paper, Scissors is a two pl ...

  10. 1090-Rock, Paper, Scissors

    描述 Rock, Paper, Scissors is a classic hand game for two people. Each participant holds out either a ...

随机推荐

  1. negix安装与配置2-反向代理一台

    negix反向代理: 1.实现效果:打开浏览器,输入www.123.com 跳转到linux系统主页面中 2.准备工作tomcat java环境 https://www.cnblogs.com/q13 ...

  2. Java异常与错误

    Java错误与异常 三种类型的异常 检查性异常:用户错误或问题引起的异常,这是程序员无法预见的.例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略 运行时异常:运行时异常是 ...

  3. .net打独立运行环境遇到无法trim遇到的bug

    背景介绍 工作中我用到kotlin写代码,在orm上ktorm是一款非常优秀的操作db的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率,这款idea插件的主体逻辑是.net开发的(没错是跨平台 ...

  4. Mac Maven 安装及配置

    一.下载 打开 Maven 官方下载页面:https://maven.apache.org/download.cgi#,点击下载链接即可开始下载:     以 Maven 3.8.4 为例,解压后可以 ...

  5. 第42篇-JNI引用的管理(1)

    在本地函数中会使用Java服务,这些服务都可以通过调用JNIEnv中封装的函数获取.我们在本地函数中可以访问所传入的引用类型参数,也可以通过JNI函数创建新的 Java 对象.这些 Java 对象显然 ...

  6. 【Proteogenomis】工具评述

    2015年的综述文章,marker一下,供以后比较试用.蛋白质基因组学研究中的质谱仪与生物信息学方法. 针对蛋白质基因组学的分析研究,总结了质谱仪和蛋白质基因组学流程分析软件的选择,重点评述了常用的生 ...

  7. 4.Reverse Words in a String-Leetcode

    class Solution { public: void reverseWords(string &s) { vector<string> data; string word; ...

  8. python2 第二天

    requests库 编码和解码 输入和输出,在Python中,为了更好的调试和输出,我们需要对字符串进⾏格式化的输出,⽐如我们定义了姓名和年龄,但是我 们需要输出完整的信息,那么就涉及到字符串格式化的 ...

  9. == 和 equals() 方法的区别

    == 在比较基本数据类型时,是比较两边的数据的值是否相等 // 整数类型 int num1 = 1; // 双精度浮点数类型 double num2 = 1.0; // 输出结果为 true Syst ...

  10. 生产调优1 HDFS-核心参数

    目录 1 HFDS核心参数 1.1 NameNode 内存生产配置 问题描述 hadoop-env.sh中配置 1.2 NameNode 心跳并发配置 修改hdfs-site.xml配置 1.3 开启 ...