Description

小A和小B在玩石头剪刀布,他们每个人写出一个序列。
小A写出了n个数。
小B写出了m个数。
其中0代表石头,1代表剪刀,2代表布
0>1,1>2,2>0。
他们总共进行k轮,第一轮选择第一个数字,后面每一轮两个人都选择序列的下一个数进行比赛(序列结尾的下一个位置在序列开头)。
问小A和小B每人赢了几局。

Solution

这题很显然先把循环节给减掉,
设g=gcd(n,m)g=\gcd(n,m)
循环节内的,对于a_i,它能访问到的b_j一定有imodg=jmodgi\mod g=j\mod g,
对于循环节外的,很显然,对于位置i,所有位置j只要符合:jmodg=imodgj\mod g=i\mod g,它在每轮循环中,依次访问b的点的顺序一定是循环同构的,
所以对于b中的1~g的数全部在a中跑一遍看能到哪些点,倍长以后预处理一下前缀和,
再O(n)O(n)扫一遍即可。

复杂度:O(n)O(n)

Code

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long LL;
const int N=1000500;
int read(int &n)
{char ch=' ';int q=0,w=1;for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());if(ch=='-')w=-1,ch=getchar();for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
bool JH;
int m,n;
LL ans,m1,n1,ans1,M1c;
int a[N],b[N],c[N];
LL f[N*3][3];
int gcd(int x,int y){return y?gcd(y,x%y):x;}
int main()
{int q;read(n),read(m);scanf("%lld",&m1);M1c=m1;fo(i,1,n)read(a[i]);fo(i,1,m)read(b[i]);if(n>m){fo(i,1,n)swap(a[i],b[i]);swap(n,m);JH=1;}n1=gcd(n,m);fo(i,1,n)f[i%n1][a[i]]++;fo(i,1,m)ans+=f[i%n1][(b[i]+1)%3],ans1+=f[i%n1][b[i]];ans=ans*(m1/(n/n1*m));ans1=ans1*(m1/(n/n1*m));m1%=(n/n1*m);fo(i,0,n1)fo(j,0,2)f[i][j]=0;LL w=m1;m1/=m;q=0;fo(i,1,n1){int t=q;for(int J=i-1;!c[J+1];J=(J+m)%n)f[++q][a[J+1]]++,c[J+1]=q;fo(j,1,q-t)fo(k,0,2)f[q+j][k]=f[t+j][k];q+=q-t;fo(j,t,q)fo(k,0,2)f[j][k]+=f[j-1][k];}fo(i,1,m){ans+=f[c[(i-1)%n+1]+m1-1][(b[i]+1)%3]-f[c[(i-1)%n+1]-1][(b[i]+1)%3];ans1+=f[c[(i-1)%n+1]+m1-1][b[i]]-f[c[(i-1)%n+1]-1][b[i]];}q=(m1*m%n)%n;w=w%m;fo(i,1,w)if(b[i]==a[(q+i-1)%n+1])ans1++;else if((b[i]+1)%3==a[(q+i-1)%n+1])ans++;ans1=M1c-ans-ans1;if(JH)swap(ans,ans1);printf("%lld %lld\n", ans1,ans);return 0;
}

【51NOD 1501】【51NOD 算法马拉松19】石头剪刀布威力加强版相关推荐

  1. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

  2. 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3

    先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...

  3. 独家 | 高季尧:定制化优化算法的应用与威力(附PPT)

    随着大数据与人工智能领域技术的发展和应用的普及,算法越发繁多复杂,需要处理的数据量也越发庞大,高性能计算能力就显得尤为重要. 本篇选自高季尧先生近期于清华大数据"技术·前沿"系列讲 ...

  4. java后端开发(九):mybatis的威力加强版之mybatis-plus

    前言 后端一半的时间都是在和关系型数据库打交道,那么虽然我们用 mybatis 这个 ORM 框架,简化代码的开发.但是代码中涉及到太多的重复操作,比如对用户的增删改查和对设备的增删改查.我们毕竟是贪 ...

  5. 三国志11威力加强版win7 64bit运行失败解决方法

    大一的时候同学推荐的单机游戏,由于本人很喜欢三国历史,所以就很感兴趣. 毕业工作之后,换了电脑,再安装这个游戏,当点击应用程序的图标时,没有响应.总结一下网上的解决方式. 一.百度下载并安装软件 三国 ...

  6. android三国2,三国群英传2威力加强版安卓

    三国群英传2威力加强版安卓版本是一款非常给力的单机三国题材策略手游,完美还原历史战役,著名历史桥段在此上演,玩家在游戏中将亲身经历各场战役,和诸多武将英雄一起征战三国,玩法非常热血,快来点击下载试试吧 ...

  7. Alfred 有道 workflow 威力加强版

    2019独角兽企业重金招聘Python工程师标准>>> 最近学习 吴恩达 的DeepLearning 的时候,发现自己的 python水平有点弱.就像想找个练手的东西写一写.想来想去 ...

  8. 51Nod 算法马拉松23

    A : 打表找规律 B : 数学期望 C : 拓扑排序+DP D : 状压DP E : 莫队+树状数组+卡常数 F : Unfinished 听说省选推迟了一个月,整个人都不好了.放假打了一场51No ...

  9. 51nod 算法马拉松4 B递归(YY)

    递归 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 函数f(n,m) { 若n=1或m=1返回a[n][m]; 返回f(n-1,m)异或f(n,m-1); } 读入2<=n, ...

最新文章

  1. 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)
  2. IOS中http请求使用cookie
  3. matlab中textread 函数
  4. SAP Spartacus B2B页面的6个tile,url是维护在什么地方的?
  5. -moz、-ms、-webkit
  6. document.addEventListener理解
  7. 频率学派(Frequentists) 贝叶斯学派(Bayesians)
  8. Android音视频开发学习——硬解码
  9. Snipaste贴图软件使用方法及快捷键
  10. 挂机宝是服务器还是虚拟主机,挂机宝属于虚拟主机吗
  11. html 如何清除历史记录,如何删除网页历史记录?
  12. LeetCode 1429. First Unique Number
  13. RGB三通道图像和灰度值简单理解
  14. Android高德地图导航or语音播报
  15. 《Python自然语言处理》——第1章 语言处理与Python 1.1 语言计算:文本和词汇...
  16. Tensorflow2.0
  17. 01-在线教育行业介绍
  18. 瀑布流无限加载的原理
  19. OPPO Enco X音质再升级 延续标杆级体验
  20. 从头开始写STM32F103C8T6驱动库(二)——编写系统初始化程序,配置时钟树

热门文章

  1. java 获取文件时间_java获取文件创建和修改时间
  2. python 的数组排序问题
  3. Python post请求模拟登录淘宝并爬取商品列表!
  4. 利用js创建一个简单的评分心理测试网站
  5. 2021年中国冰雪产业市场现状分析,三亿人上冰雪正成为现实「图」
  6. 利用 Windows 动态锁实现自动锁屏
  7. ClipCursor函数引用注意
  8. 气质结果重复性比较和pdf结果文件的批处理
  9. kubernetes组件再认知
  10. docker tcp6改为tcp_如何解决docker的端口无法访问tcp6