hdu5334

来源:互联网 发布:淘宝商城玩具大全 编辑:程序博客网 时间:2024/06/09 14:12

比赛时想了3小时,到4点有了思路,结果当时体力不够,思维不够严谨,一直wa。网上看大神题解后,发现大神的思维不是我等渣渣能想出来的,故此又重新拾起自己的思维,ac。

遇到这种题目,大家一定要想,这种题目一定是有规律的,大家要善于发现规律。对此题,我一开始是枚举前10几个数,结果到第4的时候发现,4只能由1111这种四个一样数才能得出,故此思考数列中有相同的数会使子串个数减少某些固定的数。后来发现,连续两个连续的数会使总数减少1,连续3个减少3,连续4个减少6.  

#include <iostream>#include<stdio.h>#include<math.h>using namespace std;int k;int get_n(){    int n=sqrt(2*k);    if(n*(n+1)<2*k)        n++;    return n;}int main(){    int i,j;    while(~scanf("%d",&k))    {        if(k<=100)        {            printf("%d\n",k);            for(i=1;i<=k;i++)                printf("1 ");            printf("\n");            continue;        }        int n=get_n();        int d=n*(n+1)/2-k,a=d/3,b=d-a*3,f=a/2,f1=a-f*2,len=0;        printf("%d\n",n);        for(i=1;i<=f;i++)        {            len+=4;            printf("%d %d %d %d ",i,i,i,i);        }        for(i=f+1;i<=f+f1;i++)        {            len+=3;            printf("%d %d %d ",i,i,i);        }        for(i=f+f1+1;i<=f+f1+b;i++)        {            len+=2;            printf("%d %d ",i,i);        }        for(i=len+1;i<=n;i++)            printf("%d ",i);        printf("\n");    }    return 0;}

0 0
原创粉丝点击