• <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>
            我叫張小黑
            張小黑的掙扎生活
            posts - 66,  comments - 109,  trackbacks - 0
            我的青蛙終于過了
            完全忘了算法導論上說的理論了~~其實以前寫的就只有一個小錯誤
            ax+ny=b;
            當求解x時,我們先用擴展歐幾里德extended_eculid(a,n,&x',&y');
            通過計算的x'和y'來計算x
            x可能沒解,也可能有d個不同的解
            當求解某些問題的時候,我們要求得到最小正解,如果x'*(b/d)<0時,我們應該在此解的基礎上繼續加n/d
            青蛙問題我就是這里錯了,我是在最小解的基礎上加n,
            最好不要忘了對n取模。
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1061
            //SA-SB=kL(k為整數)
            //SA=x+pm  SB=y+pn
            //(x-y)+p(m-n)=kL
            //p(n-m)+kL=x-y
            //ax+by=n<=>a'x+b'y=n/gcd(a,b)(此時a'與b'互質)
            //若x0,y0為歐幾里得所得解
            //x=x0+b't   y=y0-a't
            #include<iostream>
            __int64 Ext_Euclid(__int64 a,__int64 b,__int64
            * x,__int64* y)
            {
                __int64 p,q,d;
                
            if(a==0){*x=0;*y=1;return b;}
                
            if(b==0){*x=1;*y=0;return a;}
                d
            =Ext_Euclid(b,a%b,&p,&q);
                
            *x=q;
                
            *y=p-(a/b)*q;
                return d;
            }
            int main()
            {
                
            /*freopen("1.IN","r",stdin);
                freopen(
            "my.OUT","w",stdout);*/
                __int64 x,y,m,n,l;
            //x為A的起始點,y為B的起始點
                
            //m為x的步長,n為y的步長,l為緯度長
                __int64 c,a,d;
                __int64 p,q;
                
            while(scanf("%I64d%I64d%I64d%I64d%I64d",&x,&y,&m,&n,&l)!=EOF){
                
            if(n==m)printf("Impossible\n");
                
            else {
                    
            if(m>n){a=m-n;c=y-x;}
                    
            else {a=n-m;c=x-y;}
                    d
            =Ext_Euclid(a,l,&p,&q);
                    
            if((x>y?(x-y):(y-x))%d)printf("Impossible\n");
                    
            else {
                        p
            *=c/d;
                        
            while(p<0)p+=l/d;//這里錯了,最小的那個不是這么加的
                        p
            =p%l;
                        printf(
            "%I64d\n",p);
                    }
                }}
                return 
            0;
            }

            E Encrypted
            這道題就是簡單的應用擴展的歐幾里德,并不涉及模線性方程
            #include<iostream>
            #define MaxN 
            100005
            char word[MaxN];
            int data[MaxN],keys[MaxN];
            typedef struct node{
               
            int d;
                 
            int x;
                
            int y;
            void operator
            =(node b)
            {
                d
            =b.d;
                x
            =b.x;
                y
            =b.y;
            }}NODE;
            NODE EXTENDED_EUCLID(
            int a,int b)
            {
                NODE first,sec;
                
            if(b==0){
                    sec.d
            =a;
                    sec.x
            =1;
                    sec.y
            =0;
                    return sec;
                }
                first
            =EXTENDED_EUCLID(b,(a%b+b)%b);
                sec.d
            =first.d;
                sec.x
            =first.y;
                sec.y
            =first.x-(a/b)*first.y;
                return sec;
            }
            int main()
            {
                
            int n,i;
                node tmp;
                
            while(scanf("%s",word)!=EOF){
                    memset(data,
            0,sizeof(data));
                    memset(keys,
            0,sizeof(keys));
                    
            int len=strlen(word);
                    scanf(
            "%d",&n);
                    
            for(i=0;i<n;i++)
                        scanf(
            "%d",&data[i]);
                    
            for(i=0;i<n;i++)
                        scanf(
            "%d",&keys[i]);
                    
            for(i=0;i<n;i++){
                        tmp
            =EXTENDED_EUCLID(data[i],keys[i]);
                        
            while(tmp.x<0)
                            tmp.x
            +=keys[i]/tmp.d;
                        printf(
            "%c",word[tmp.x%len]);
                    }
                    printf(
            "\n");
                }
                return 
            0;
            }
            posted on 2008-04-08 00:42 zoyi 閱讀(201) 評論(0)  編輯 收藏 引用 所屬分類: acm比賽總結
            歡迎光臨 我的白菜菜園

            <2008年3月>
            2425262728291
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            acmer

            online judge

            隊友

            技術

            朋友

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久国产精品三级网| 久久精品无码免费不卡| 久久亚洲中文字幕精品一区四| 久久久久国产精品| 亚洲欧美精品伊人久久| 久久亚洲电影| 亚洲AV无码久久精品成人| 久久精品无码一区二区三区| 亚洲国产精品人久久| 久久免费视频一区| 久久66热人妻偷产精品9| 国产精品岛国久久久久| 久久久久亚洲精品天堂久久久久久| 日韩AV毛片精品久久久| 久久亚洲精品国产精品| 久久青青草原精品国产软件| 久久久久久综合网天天| 亚洲午夜久久久精品影院 | 伊人久久一区二区三区无码| 亚洲国产另类久久久精品黑人| 99精品久久精品| 2021国产精品午夜久久| AA级片免费看视频久久| 久久综合给久久狠狠97色| 久久久精品日本一区二区三区| 麻豆一区二区99久久久久| 久久久亚洲裙底偷窥综合| 日本一区精品久久久久影院| 亚洲中文字幕无码久久2020| 欧美一级久久久久久久大片| 丁香五月网久久综合| 婷婷五月深深久久精品| 久久久这里只有精品加勒比| 久久www免费人成精品香蕉| 97热久久免费频精品99| 一本色道久久综合狠狠躁| 国产精品久久新婚兰兰| 久久久久亚洲AV成人网人人软件| 久久99精品国产一区二区三区 | 久久精品水蜜桃av综合天堂| 亚洲人成精品久久久久|