ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

poj1207(水题不水啊---RMQ,线段树)

http://poj.org/problem?id=1207
		3. 		 if n = 1 then STOP 
4. if n is odd then n <-- 3n+1
5. else n <-- n/2
问题很明白,之前在hdu上也做了,经验还是没有哇。WA了好多好多次。
1w的数据很弱,直接暴力当然能过。
不过100W就不行了。记忆化搜索DP是个好办法
我最之前的做法就是这个,效果还算不错。

求出所有的值后就是区间求最大值了,有RMQ算法,线段树等都行。不过,我都不会呀!!!!!!!!
朗讯的时候就做了个区间最值的问题,当时朴素算法一直WA,jh辉神 qsort()一下,从前往后给AC了。YMYM

最后还是就是细节问题了,像输出s,t。有可能s>t,输出却是要按照输入顺序输出!晕,就这样WA了一天。
总结:
      细节问题要注意!多想想其他算法,水题不水呀。
 

#include<stdio.h>
#include<string.h>
#include<math.h>
long long a
[10005];
int GetC()
{
    int i
,t;
    for (i=1;i<=10000 ;i++ )
    {
        t
=i;a[i]=1;
        while (t!=1)
        {
            a
[i]++;
            if (t&1)
                t
=3*t+1;
            else
                t/
=2;
        }
    }
}
int main()
{
    int s
,t,i;
    long long mm;
    GetC();
    while (scanf("%d%d",&s,&t)==2)
    {
        printf(
"%d %d ",s,t);
        if (s>t)
            i
=s,s=t,t=i;
        mm=a[s];
        for (i=s;i<=t ;i++ )
            mm=mm>a[i]?mm:a[i];
        printf("%I64d\n",mm);
    }
    return 
0;
}
#include<stdio.h>
#include<string.h>
#include<math.h>
long long a
[10005];
int GetC()
{
    int i
,t;
    for (i=1;i<=10000 ;i++ )
    {
        t
=i;a[i]=1;
        while (t!=1)
        {
            a
[i]++;
            if (t&1)
                t
=3*t+1;
            else
                t/
=2;
        }
    }
}
int main()
{
    int s
,t,i;
    long long mm;
    GetC();
    while (scanf("%d%d",&s,&t)==2)
    {
        printf(
"%d %d ",s,t);  //这个WA了一次
        if (s>t)                    //这个WAl了好多次!!
            i
=s,s=t,t=i;
        mm=a[s];
        for (i=s;i<=t ;i++ )
            mm=mm>a[i]?mm:a[i];
        printf("%I64d\n",mm);
    }
    return 
0;
}
额,代码还是没有自己风格啊。这些个函数名还是那么难取呢。

posted on 2012-04-28 16:15 wangs 阅读(520) 评论(0)  编辑 收藏 引用 所属分类: ACM-模拟


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理