• <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

            常用鏈接

            統(tǒng)計

            積分與排名

            百事通

            最新評論

            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 此最相思 閱讀(1890) 評論(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

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

            久久精品亚洲福利| 国产ww久久久久久久久久| 欧美日韩精品久久免费| 伊人久久大香线蕉综合Av| 奇米综合四色77777久久| 2020久久精品国产免费| 天堂无码久久综合东京热| 久久99精品久久久久久久久久| 成人a毛片久久免费播放| 精品久久久中文字幕人妻 | 亚洲国产精品无码久久九九| 伊人色综合久久天天人手人婷| 亚洲伊人久久大香线蕉苏妲己| 色播久久人人爽人人爽人人片AV| 99久久99久久精品免费看蜜桃| 久久青青草原精品国产不卡 | 久久福利片| 成人综合伊人五月婷久久| 中文精品久久久久人妻| 国产精品日韩欧美久久综合| 无码精品久久久天天影视| 亚洲七七久久精品中文国产| 亚洲国产成人久久综合碰碰动漫3d| 久久91精品国产91久| 久久久久国色AV免费看图片| 国产一久久香蕉国产线看观看| 久久久SS麻豆欧美国产日韩| 亚洲国产成人久久综合野外| Xx性欧美肥妇精品久久久久久| 欧美久久综合性欧美| 精品久久久久久无码中文字幕一区 | 久久久久久国产a免费观看黄色大片| 狠狠色噜噜狠狠狠狠狠色综合久久| 人妻丰满AV无码久久不卡| 波多野结衣久久一区二区| 亚洲精品无码久久久| 污污内射久久一区二区欧美日韩| 丁香久久婷婷国产午夜视频| 大香网伊人久久综合网2020| 久久久久久国产精品免费免费| 国产一久久香蕉国产线看观看 |