ZOJ-3290

来源:互联网 发布:redis作为mysql的缓存 编辑:程序博客网 时间:2024/06/04 01:26

构造最长的序列,直接看代码吧。。懒的解释,附大神的注释:

#3290 简单题,构造最长递增序列拆分,按照 a(n+1) = a(n) * 2 + 1 构造,有剩的全部加到最后一个就是了。

#include<stdio.h>int main(){    long long n;    long long a[100];    int first = 1;    while (scanf("%lld", &n) != EOF)    {        if (!first)            putchar('\n');        else            first = 0;        long long sum = 1, curr = a[0] = 1;        int index = 1, i;        while (n - sum >= (curr * 2 + 1))        {            curr = curr * 2 + 1;            a[index++] = curr;            sum += curr;        }        a[index - 1] += n - sum;        printf("%d\n", index);        for (i = 0; i < index; i++)            printf(i ? " %lld" : "%lld", a[index - 1 - i]);        putchar('\n');    }    return 0;}


0 0