Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

環状すごろく

ユキさんは、子供会の催しでみんなで遊べるようにすごろくを作りました。このすごろくでは、環状にマスが並んでいて、それぞれのマスには１以上の整数が書いてあります。

プレイヤーは出発点としてどこかのマスを選んで自分の駒を置きます。そのマスに書いてある数だけ、時計回りに駒を進めます。止まったマスに書いてある数だけ、再び時計回りに駒を進めます。これを繰り返して、出発点に選んだマスの上で駒が止まったら「あがり」です。

実際には、マスの選び方によっては絶対に「あがり」にならない場合もあります。ユキさんは、このすごろくで「あがり」にたどり着けるマスの個数を数えようとしています。

すごろくの情報を入力とし、「あがり」にたどり着けるマスの個数を報告するプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
a1 a2 ... aN

１行目にすごろくに含まれるすべてのマスの個数 N (1 ≤ N ≤ 100000) が与えられる。２行目に、それぞれのマスに書かれた数 ai (1 ≤ ai ≤ 109) が、時計回りに順番に与えられる。

Output

「あがり」にたどり着けるマスの個数を１行に出力する。

Sample Input 1

3
1 1 1

Sample Output 1

3

Sample Input 2

3
1 1 2

Sample Output 2

2

Sample Input 3

8
2 3 7 3 3 3 4 4

Sample Output 3

6

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
import static java.lang.Integer.parseInt;
 
/**
 * Cyclic Sugoroku
 */
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
 
        int N = parseInt(br.readLine());
        int[] a = new int[N];
 
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        for (int i = 0; i < N; i++) {
            a[i] = parseInt(st.nextToken());
        }
 
        //
        int[] indeg = new int[N];
        boolean[] used = new boolean[N];
 
        for (int i = 0; i < N; i++) {
            indeg[(i + a[i]) % N]++;
        }
 
 
        for (int i = 0; i < N; i++) {
            int j = i;
            while (!used[j] && indeg[j] == 0) {
                used[j] = true;
                j = (j + a[j]) % N;
                indeg[j]--;
            }
        }
 
//      System.out.println(Arrays.stream(indeg).filter(x -> x != 0).count());
 
        int count = 0;
        for (int i = 0; i < N; i++) {
            if (indeg[i] != 0) count++;
        }
        System.out.println(count);
    }
}