HDU6130 Kolakoski

来源:互联网 发布:js防水涂料 编辑:程序博客网 时间:2024/05/21 10:55

【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=6130

题目意思

给你个kilakoski数列,问你第n个数字是什么。

解题思路

首先kilakoski是由1,2组成的无序数列,而kilakoski a[i]为数表示的是第i为相同数字的长度。比如(1,2,2),a[3]==2,所以后面(1,2,2,1,1)数字不对交叉。题目给的时间够打表所以打表过就好了

代码部分

#include<bits/stdc++.h>using namespace std;int a[10000007];void work()  ///打表{    int i,j;   /// j表示第几个数相同个数    a[1]=1;    a[2]=2;    a[3]=2;    a[4]=1;    a[5]=1;    for( i=6,j=4;i<10000007;j++)    {        if(a[j]==2)   ///每次加都与上个不同数字,a[j]表示个数        {            if(a[i-1]==1)              {                a[i++]=2;                a[i++]=2;            }            else if(a[i-1]==2)            {                a[i++]=1;                a[i++]=1;            }        }       else if(a[j]==1)        {            if(a[i-1]==1)            {                a[i++]=2;            }            else if(a[i-1]==2)            {                a[i++]=1;            }        }    }}int main(){    int T;    scanf("%d",&T);    work();    while(T--)    {        int n;        scanf("%d",&n);        printf("%d\n",a[n]);    }    return 0;}
原创粉丝点击