HDU

来源:互联网 发布:阿里云挂载数据盘设置 编辑:程序博客网 时间:2024/06/03 20:43

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

题目大意:对于一串序列1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,把他们相邻且相同的分为一组,求某一组里面的个数

解题思路:观察分好的组,发现把他们的个数写成序列就和原序列相同,那么我们只要知道1,2,就可以根据这个性质一直往后推,比如1,2,那么第二组有两个相同的,所以2后面是2,那么第三组有两个相同的,所以2后面是1,1,以此类推

AC代码:

#include<cstdio>using namespace std;const int MAXN = 10000000 + 5;bool arr[MAXN];void toInit(){    arr[1] = 0, arr[2] = arr[3] = 1;    for (int i = 3, j = 4;j < MAXN;++i)//因为只有1,2干脆改成0,1,方便写    {        if (arr[i]) arr[j] = arr[j + 1] = !arr[j - 1], j += 2;        else arr[j] = !arr[j - 1], j++;    }}int main(){    toInit();    int t;scanf("%d", &t);    while (t--)    {        int n;scanf("%d", &n);        printf("%d\n", arr[n] + 1);    }    return 0;}
原创粉丝点击