Gym - 101889J - Jumping Frog
阿新 • • 發佈:2018-11-10
題目連結<http://codeforces.com/gym/229829/attachments>
題意:
給出一個迴圈字串,R代表可以走,P代表不可以走。問有多少個步長,使得從某一點出發能回到原點。
題解:
因為是回到原點,所以可以只考慮每個因子。如果一個因子確定是可以的,那麼它的倍數也就都可以了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+7; char s[N]; int stp[N],top,n,m; bool vis[N]; bool jg(int x,int len){ int now=(x+len)%n; while(1){ if(x==now) return true; if(s[now]=='P') return false; now=(now+len)%n; } } int main() { scanf("%s",s); n=strlen(s); for(int i=1;i<n;i++){ if(n%i==0) stp[++top]=i; } int ans=0; for(int i=1;i<=top;i++){ int len=stp[i]; for(int j=0;j<len;j++){ if(s[j]=='P') continue; if(jg(j,len)){ for(int k=1;k*len<n;k++){ if(vis[k*len]) continue; ans++; vis[k*len]=true; } break; } } } printf("%d\n",ans); }