B. AND Sequences
https://codeforces.com/contest/1513/problem/B
문제
양수로 이루어진 수열 a1,a2,...,an이
1<=i<=n인 모든 i 에 대해,
a1&a2&...&ai=ai+1&ai+2&...&an 을 만족할 때
이 수열을 "좋은 수열"이라고 하자.
길이가 n인 임의의 수열이 주어질때, "좋은 수열"이 될 수 있는 permutaion의 개수를 구하라.
풀이
이 문제의 key point는 &를 하고 나면 숫자가 작아지는 것이다.
즉, a&b<=a이다.
a1,...,an이 "좋은 수열"이라고 하자.
a1=a2&a3&...&an≤a3&a4&...&an≤...≤an
an=a1&a2&...&an−1≤a1&a2&...&an−2≤...≤a1
즉, a1=an이고, 그 사이의 모든 항들은 다 a1과 값이 같다.
수열이 주어지면 가장 작은 값 x를 구하고, x의 개수가 2이상인지 확인한다.
x가 아닌 다른 모든 수 y에 대해, x & y = x인지 확인한다.
두 가지 조건을 통과했으면, 순열의 개수를 구하면 된다.