HDU 6130-Kolakoski

来源:互联网 发布:串口读取电子秤数据 编辑:程序博客网 时间:2024/06/06 00:00

Kolakoski

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)
Total Submission(s): 249    Accepted Submission(s): 116


题目链接:点击打开链接


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 nth element.
 

Input
The first line contains a positive integer T(1T5), denoting the number of test cases.
For each test case:
A single line contains a positive integer n(1n107).
 

Output
For each test case:
A single line contains a nonnegative integer, denoting the answer.


Sample Input
2
1
2
 


Sample Output
1
2


题意:有这么一个序列  1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1   ,然后给你一个n,让你输出这个序列的第n个数,一目了然就知道是 找规律,这个序列只有 1 和 2 组成,结果要么是 1 ,要么是 2 ,结果是 1 还是 2 呢,你猜猜?


分析:就是一个规律,但怎么找呢?我们一起来看看:


#include <iostream>#include<stdio.h>#include<cmath>using namespace std;#define max1  10000010int s[max1],h[max1];int main(){    int T,m;    int j=3;    s[1]=1;    s[2]=2;    s[3]=2;    h[1]=1;    h[2]=2;    h[3]=2;    for(int i=4;i<=10000010;)    {        if(h[j]==2)        {            if(s[i-1]==1)            {                s[i]=2;                s[i+1]=2;                i+=2;            }            else            {                s[i]=1;                s[i+1]=1;                i+=2;            }        }        else        {            if(s[i-1]==2)            {                s[i]=1;                i++;            }            else            {                s[i]=2;                i++;            }        }        ++j;        h[j]=s[j];    }    scanf("%d",&T);    while(T--)    {        scanf("%d",&m);        printf("%d\n",s[m]);    }    return 0;}