• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            misschuer

            常用鏈接

            統計

            積分與排名

            百事通

            最新評論

            hdu 1402 A * B Problem Plus

            http://acm.hdu.edu.cn/showproblem.php?pid=1402
            #include<iostream>
            #include
            <cmath>
            using namespace std;
            typedef 
            struct vir{
                    
            double re,im;
                    vir()
            {}
                    vir(
            double a,double b){re=a;im=b;}
                    vir 
            operator +(const vir &b)return vir(re+b.re,im+b.im);}
                    vir 
            operator -(const vir &b)return vir(re-b.re,im-b.im);}
                    vir 
            operator *(const vir &b)return vir(re*b.re-im*b.im,re*b.im+b.re*im);}
            }
            vir;
            vir x1[
            200005],x2[200005];
            const double Pi = acos(-1.0);
            void change(vir *x,int len,int loglen)
            {
                    
            int i,j,k,t;
                    
            for(i=0;i<len;i++)
                    
            {
                            t 
            = i;
                            
            for(j=k=0;j<loglen;j++,t>>=1)
                                    k 
            = (k<<1)|(t&1);
                            
            if(k<i)
                            
            {
                                    vir wt 
            =  x[k];
                                    x[k] 
            = x[i];
                                    x[i] 
            = wt;
                            }

                    }

            }

            void fft(vir *x,int len,int loglen)
            {
                    
            int i,j,t,s,e;
                    change(x,len,loglen);
                    t 
            = 1;
                    
            for(i=0;i<loglen;i++,t<<=1)
                    
            {
                            s 
            = 0;
                            e 
            = s + t;
                            
            while(s<len)
                            
            {
                                    vir a,b,wo(cos(Pi
            /t),sin(Pi/t)),wn(1,0);
                                    
            for(j=s;j<s+t;j++)
                                    
            {
                                            a 
            = x[j];
                                            b 
            = x[j+t]*wn;
                                            x[j] 
            = a + b;
                                            x[j
            +t] = a - b;
                                            wn 
            =wn*wo;
                                    }

                                    s 
            = e+t;
                                    e 
            = s+t;
                            }

                    }

            }


            void dit_fft(vir *x,int len,int loglen)
            {
                    
            int i,j,s,e,t=1<<loglen;
                    
            for(i=0;i<loglen;i++)
                    
            {
                            t
            >>=1;
                            s
            =0;
                            e
            =s+t;
                            
            while(s<len)
                            
            {
                                    vir a,b,wn(
            1,0),wo(cos(Pi/t),-sin(Pi/t));
                                    
            for(j=s;j<s+t;j++)
                                    
            {
                                            a 
            = x[j]+x[j+t];
                                            b 
            = (x[j]-x[j+t])*wn;
                                            x[j] 
            = a;
                                            x[j
            +t] = b;
                                            wn 
            = wn*wo;
                                    }

                                    s 
            = e+t;
                                    e 
            = s+t;
                            }

                    }

                    change(x,len,loglen);
                    
            for(i=0;i<len;i++)
                            x[i].re
            /=len;
            }



            int main()
            {
                    
            char a[100005],b[100005];
                    
            int i,len1,len2,t,over,len,loglen;
                    
                    
            while(scanf("%s%s",a,b)!=EOF)
                    
            {
                            len1 
            = strlen(a)<<1;
                            len2 
            = strlen(b)<<1;
                            len 
            = 1;
                            loglen 
            = 0;
                            
            while(len<len1)
                            
            {
                                    len
            <<=1;
                                    loglen
            ++;
                            }

                            
            while(len<len2)
                            
            {
                                    len
            <<=1;
                                    loglen
            ++;
                            }

                            
            for(i=0;a[i]!='\0';i++)
                            
            {
                                    x1[i].re 
            = a[i]-'0';
                                    x1[i].im 
            = 0;
                            }

                            
            for(;i<len;i++)
                                    x1[i].re 
            = x1[i].im = 0;
                            
            for(i=0;b[i]!='\0';i++)
                            
            {
                                    x2[i].re 
            = b[i]-'0';
                                    x2[i].im 
            = 0;
                            }

                            
            for(;i<len;i++)
                                    x2[i].re 
            = x2[i].im = 0;
                            fft(x1,len,loglen);
                            fft(x2,len,loglen);
                            
            for(i=0;i<len;i++)
                                    x1[i] 
            = x1[i]*x2[i];
                            dit_fft(x1,len,loglen);
                            
            for(i=(len1+len2)/2-2,over=loglen=0;i>=0;i--)
                            
            {
                                    t 
            = x1[i].re + over + 0.5;
                                    a[loglen
            ++= t%10;
                                    over 
            =  t/10;
                            }

                            
            while(over)
                            
            {
                                    a[loglen
            ++= over%10;
                                    over 
            /= 10;
                            }

                            
            for(loglen--;loglen>=0&&!a[loglen];loglen--);
                            
            if(loglen<0)
                                    putchar(
            '0');
                            
            else
                                    
            for(;loglen>=0;loglen--)
                                            putchar(a[loglen]
            +'0');
                            putchar(
            '\n');
                    }

                    
            return 0;
            }

            posted on 2009-04-18 15:59 此最相思 閱讀(1888) 評論(6)  編輯 收藏 引用

            評論

            # re: hdu 1402 A * B Problem Plus 2009-10-13 20:18 zhou

            這題真難呀!!!!  回復  更多評論   

            # re: hdu 1402 A * B Problem Plus 2009-10-13 20:20 啊是

            嗯  回復  更多評論   

            # re: hdu 1402 A * B Problem Plus 2009-10-13 20:35 zhou

            回復這么快!!! ORZ ORZ!!!  回復  更多評論   

            # re: hdu 1402 A * B Problem Plus 2009-10-13 20:36 啊是

            連接到Q了呀  回復  更多評論   

            # re: hdu 1402 A * B Problem Plus 2010-01-16 00:43 abilitytao

            請問有什么這方面的資料嗎?我最近也想研究這個問題 希望能和你交流^_^
            我的QQ是 64076241  回復  更多評論   

            # re: hdu 1402 A * B Problem Plus 2011-04-03 23:13 xiaomai

            這題,太惡心了  回復  更多評論   

            久久婷婷是五月综合色狠狠| 久久精品aⅴ无码中文字字幕不卡| 国产精品丝袜久久久久久不卡| 99久久国语露脸精品国产| 777午夜精品久久av蜜臀| 久久综合亚洲鲁鲁五月天| 99精品久久久久久久婷婷| 久久久久亚洲av无码专区导航| 97精品国产91久久久久久| 99久久精品国产一区二区三区| 欧美亚洲另类久久综合婷婷| 欧美黑人激情性久久| 9久久9久久精品| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久精品免费全国观看国产| 免费一级欧美大片久久网| 老男人久久青草av高清| 色综合久久久久网| 伊人久久大香线蕉综合影院首页 | 人妻无码久久精品| 久久夜色精品国产网站| 色婷婷综合久久久久中文字幕| 久久人人爽爽爽人久久久| 久久天天躁狠狠躁夜夜av浪潮 | 久久人人爽人人精品视频| 国产精品久久久久a影院| 66精品综合久久久久久久| 久久亚洲精品成人AV| 国产精品久久久久久久久久影院| 999久久久免费精品国产| 中文字幕亚洲综合久久菠萝蜜| 精品一区二区久久久久久久网站| 亚洲精品国产第一综合99久久| 久久99国产精品久久99果冻传媒| 久久SE精品一区二区| 欧美精品丝袜久久久中文字幕| 91精品国产综合久久婷婷| 精品国产青草久久久久福利| 久久人人爽人人爽人人片AV麻烦| 三级韩国一区久久二区综合| 亚洲国产天堂久久综合网站|