Kolakoski
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 317 Accepted Submission(s): 146
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
题意 输入n求
Kolakoski序列的第n项;
思路:把Kolakoski序列打表,,模拟生成一下Kolakoski序列 看下图相信你能看的懂(图片来自维基百科)
比赛结束后看了下数据,,,好水的数据吐槽一行输出就解决 printf("1\n1\n2\n2\n2\n");
code:
#include<cstdio>
using namespace std;
bool a[10000005];
int main()
{
a[1]=0;a[2]=a[3]=1;
int x=3;bool falg=true;
for(int i=3;;i++){
if(a[i]) {
if(falg){a[++x]=0;a[++x]=0;falg=!falg;}
else {a[++x]=1;a[++x]=1;falg=!falg;}
}
else{
if(falg){a[++x]=0;falg=!falg;}
else {a[++x]=1;falg=!falg;}
}
if(x>10000004) break;
}
int T;
scanf("%d",&T);
while(T--){
int b;
scanf("%d",&b);
printf("%d\n",a[b]+1);
}
return 0;
}