Kolakoski
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 639 Accepted Submission(s): 316
Problem Description
This is Kolakosiki sequence:
1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1……
. This sequence consists of
1
and
2
, and its first term equals
1
. Besides, if you see adjacent and equal terms as one group, you will get
1,22,11,2,1,22,1,22,11,2,11,22,1……
. Count number of terms in every group, you will get the sequence itself. Now, the sequence can be uniquely determined. Please tell HazelFan its
n
th element.
Input
The first line contains a positive integer
T(1≤T≤5)
, denoting the number of test cases.
For each test case:
A single line contains a positive integer n(1≤n≤107) .
For each test case:
A single line contains a positive integer n(1≤n≤107) .
Output
For each test case:
A single line contains a nonnegative integer, denoting the answer.
A single line contains a nonnegative integer, denoting the answer.
Sample Input
2 1 2
Sample Output
1 2
Source
就是Kolakoshi数列 规律是 a[1] = 2 则后面是两个相同的数 2 2 ,于是 a[1] = a[2] = 2;
由因为a[2] = 2,所以 a[3] = a[4] = 1,由于 a[3] = 1,所以a[5] = 2 以此类推
暴力打表就好了
#include <bits/stdc++.h>
using namespace std;
#define maxn 10000000
int a[maxn + 10];
void init(){
a[0] = 1;
a[1] = 2;
a[2] = 2;
int cnt = 3;
int flag = 1, ans = 2;
for(int i = 2;cnt <= maxn + 5;i++){
ans += flag * (-1);
flag *= -1;
for(int j = 1;j <= a[i];j++){
a[cnt++] = ans;
}
}
}
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
cout << a[n - 1] << endl;
}
return 0;
}