注册 登录
考研论坛 返回首页

sleeping1346的个人空间 http://home.kaoyan.com/?2907038 [收藏] [复制] [分享] [RSS]

日志

hdu3784-----空间换时间

已有 1648 次阅读2011-3-6 22:03 |个人分类:ACM摸索|

简单题,却交了17次才成功。
1.设置一个bool型数组进行标记,以空间换时间,以后应对这种情况敏感。
2.题中说不大于输入的a[i]不大于1000,但并不是说运行过程中不会产生大于1000的数,所以访问数组前可以加if(nn<1001),以防止re。
3.最后的倒序输出时,有可能a[0]是覆盖数而不用输出,从而一行最后一个是空格而不是回车,导致pe。所以应先统计输出个数。

#include<stdio.h>
#include<string>

int a[502];
bool ad[1002];

void fun(int nn)
{
       while(nn!=1)
       {
          if(nn%2==0)nn=nn/2;
          else{nn=nn*3+1;nn=nn/2;}
          if(nn<1001)ad[nn]=false;
       }
       return;
}

int main()
{
    int n,i;
    int k[502],ct;
    while(scanf("%d",&n)!=-1)
    {
       memset(ad,0,sizeof(ad));
       for(i=0;i<n;i++){scanf("%d",&a[i]);ad[a[i]]=true;}
       for(i=0;i<n;i++)fun(a[i]);
       for(ct=i=0;i<n;i++)if(ad[a[i]])k[ct++]=a[i];
       for(i=ct-1;i>=0;i--)printf( i == 0 ? "%d\n" : "%d ", k[ i ] );
    }
    return 0;
}


路过

雷人

握手

鲜花

鸡蛋
收藏 分享邀请 分享到人人 举报

评论 (0 个评论)

关于我们|商务合作|小黑屋|手机版|联系我们|服务条款|隐私保护|帮学堂| 网站地图|院校地图|漏洞提交|考研帮

GMT+8, 2024-5-7 05:39 , Processed in 0.050884 second(s), Total 8, Slave 8(Usage:3M, Links:[2]1,1_1) queries , Memcache On.

Powered by Discuz!

© 2001-2017 考研 Inc.

返回顶部
× 关闭