2017-2018 ACM-ICPC Latin American Regional Programming Contest J - Jumping frog 题解(gcd)
题目链接
题目大意
一只青蛙在长度为N的字符串上跳跃,“R”可以跳上去,“P”不可以跳上去。
字符串是环形的,N-1和0相连。
青蛙的跳跃距离K的取值范围是[1, N-1],选定K之后不可改变。
要求青蛙最后能跳回起点(起点可以是0-N-1的任意一个位置),问K的取值有多少种选择。
\(3≤N≤{10}^5\)。
题目思路
主要是要发现每一次走的步数一定是gcd(i,n)
然后发现gcd只有log(n)(可能多一些,但是没多太大)
然后O(n) check
代码
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
//#define int long long
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
char s[maxn];
int n;
int vis[maxn];
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
bool check(int x){
    for(int i=1;i<=x;i++){
        bool flag=1;
        for(int j=i;j<=n;j+=x){
            if(s[j]=='P'){
                flag=0;
                break;
            }
        }
        if(flag) return 1;
    }
    return 0;
}
signed main(){
    memset(vis,-1,sizeof(vis));
    scanf("%s",s+1);
    n=strlen(s+1);
    int ans=0;
    for(int i=1;i<=n-1;i++){
        int x=gcd(i,n);
        if(vis[x]==-1){
            if(check(x)){
                vis[x]=1;
            }else{
                vis[x]=0;
            }
        }
        ans+=vis[x];
    }
    printf("%d\n",ans);
    return 0;
}
												
											2017-2018 ACM-ICPC Latin American Regional Programming Contest J - Jumping frog 题解(gcd)的更多相关文章
- 2017-2018 ACM-ICPC Latin American Regional Programming Contest PART (11/13)
		
$$2017-2018\ ACM-ICPC\ Latin\ American\ Regional\ Programming\ Contest$$ \(A.Arranging\ tiles\) \(B. ...
 - 训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest
		
2017-2018 ACM-ICPC Latin American Regional Programming Contest 试题地址:http://codeforces.com/gym/101889 ...
 - 2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution
		
A - Arranging tiles 留坑. B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符 ...
 - 2017-2018 ACM-ICPC Latin American Regional Programming Contest
		
题面pdfhttps://codeforc.es/gym/101889/attachments/download/7471/statements-2017-latam-regional.pdf zyn ...
 - 2017-2018 ACM-ICPC Latin American Regional Programming Contest  GYM101889
		
挺有意思的一套题,题也没有啥毒瘤了,本来是队切的结果种种原因大家全挂机了. 只补了百人题,一共7个,其他的暂时先不补了,,也不会嘛qwq H:签到 #include <bits/stdc++.h ...
 - 2017-2018 ACM-ICPC Latin American Regional Programming Contest D.Daunting device
		
题意:一个数组n个操作每次先查询p颜色的数量然后求出区间,区间染色成x,然后求最大染色数 题解:odt裸题,多维护一个color个数数组就好了 //#pragma comment(linker, &q ...
 - 2019-2020 ACM-ICPC Latin American Regional Programming Contest
		
代码见:戳 easy: EIM medium-easy: BDFKL medium: ACJ medium-hard: H A - Algorithm Teaching 题意 给一些集合,现从每个集合 ...
 - Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009)  A. Trick or Treat  (三分)
		
题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...
 - ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution
		
A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...
 
随机推荐
- SpringBoot+Mybatis_Plus Generator
			
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Control ...
 - 在国内使用Google验证码reCaptcha
			
如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用.但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义.所以各大平台为了应对这种情况也是使用类似 ...
 - 作为servlet容器的hi-nginx-java
			
hi-nginx-java是一个独立于java官方的servlet规范,它有能力把NGINX直接编成servlet容器服务器.换言之,无需安装tomcat等容器服务器,也无需使用nginx的反向代理功 ...
 - vue API 知识点(1)---全局 API 总结
			
1.Vue.extend(options) 构造器,创建一个 子类 .参数是一个包含组件选项的对象 data 选项是特例,需要注意 在 Vue.extend() 中它必须是一个函数, <div ...
 - Dynamic 365 学习(1)
			
一 创建解决方案 1.点击下拉菜单 2.找到设置并选择 3.点击解决方案 进入解决方案 该页面会显示你的所有的解决方案 你新建之后的可以在这里进行查看,也可以新增 删除 ... 这里我们先新建一 ...
 - 如何构建高性能服务器(以Nginx为例)
			
方法论 软件层面 增大CPU利用率 使用全部CPU, worker进程数等于CPU 进程间不做无用的切换 繁忙时不主动让出CPU worker进程之间不争抢CPU CPU切换需要5us,如果大量进程需 ...
 - asp.net 页面,文字自适应手机屏幕
			
(1)在<head>和</head>之间插入代码. <meta name="viewport" content="width=device- ...
 - mysql权限管理命令
			
#创建用户 create user 'songwp' IDENTIFIED BY '1234' #用户授权 GRANT ALL ON DB01.* TO 'songwp' #撤销权限 REVOKE A ...
 - JAVA程序员工作常用英语(细心整理)
			
基础----进阶 A. array数组accessible 可存取的 area面积audio 音频 addition 加法 action 行动 arithmetic 算法adjustment 调整 a ...
 - 运维和shell
			
什么是运维 术语名词 IDC--(Internet Data Center)互联网数据中心,主要服务包括整机租用.服务器托管.机柜租用.机房租用.专线接入和网络管理服务等.广义上的IDC业务,实际上就 ...