Kolakoski
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 766 Accepted Submission(s): 408
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
Recommend
题目大意:给你一个符合要求的数组,问第n位是几。
解题思路:暴力打表出数组,然后输出。
AC代码
#include<cstdio>
#include<iostream>
using namespace std;
int f[10000005]={1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1};
void fun(){
int i=20,j=13;
while(i<=10000000){
if(f[j]==1){
if(f[i-1]==1)f[i]=2;
else f[i]=1;
i++;
}
else{
if(f[i-1]==1)f[i++]=2,f[i]=2;
else f[i++]=1,f[i]=1;
i++;
}
j++;
}
}
int main(){
fun();
int t;
scanf("%d",&t);
//for(int i=0;i<34;i++)printf("%d",f[i]);cout<<endl;
while(t--){
int n;
scanf("%d",&n);
printf("%d\n",f[n-1]);
}
return 0;
}