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

            POJ 3318 Matrix Multiplication 隨機(jī)化算法

            Matrix Multiplication
            Time Limit: 2000MS Memory Limit: 65536K
            Total Submissions: 11924 Accepted: 2408

            Description

            You are given three n × n matrices A, B and C. Does the equation A × B = C hold true?

            Input

            The first line of input contains a positive integer n (n ≤ 500) followed by the the three matrices A, B and C respectively. Each matrix's description is a block of n × n integers.

            It guarantees that the elements of A and B are less than 100 in absolute value and elements of C are less than 10,000,000 in absolute value.

            Output

            Output "YES" if the equation holds true, otherwise "NO".

            Sample Input

            2
            1 0
            2 3
            5 1
            0 8
            5 1
            10 26
            

            Sample Output

            YES

            Hint

            Multiple inputs will be tested. So O(n3) algorithm will get TLE.

            Source

            給定矩陣A和B,判斷矩陣C是不是它們的乘積。

            題目明確表示直接判斷會(huì)超時(shí),而Strass和直接相乘的O(n^3)效果相差不多。
            因而采用隨機(jī)化方法,按我自己的想法,隨機(jī)測(cè)試C中的若干元素,以確定結(jié)果,看了討論區(qū),才發(fā)現(xiàn)有更加“專業(yè)”的辦法。
            隨機(jī)生成行向量I,則若A*B=C,那么必有I*A*B=I*C;反之,不一定成立,算法的隨機(jī)性正體現(xiàn)在這里。
            用一個(gè)必要不充分條件來(lái)判斷結(jié)果的正確性,比盲目測(cè)試效果往往要好得多。
            這個(gè)必要條件判斷結(jié)果的時(shí)間復(fù)雜度是O(N^2)的,這是題目輸入數(shù)據(jù)量可以接受的。
            /*Source Code

            Problem: 3318  User: y09 
            Memory: 3080K  Time: 1063MS 
            Language: C  Result: Accepted 

            Source Code 
            */

            #include 
            <stdio.h>
            #include 
            <time.h>
            #include
            <stdlib.h>
            int main()
            {
                
            int n;
                
            int i,j;
                
            int mat1[500][500];
                
            int mat2[500][500];
                
            int mat3[500][500];
                __int64 te1[
            500]={0};
                __int64 te2[
            500]={0};
                __int64 te3[
            500]={0};
                __int64 te4[
            500]={0};
                time_t t;
                srand((unsigned) time(
            &t));
                scanf(
            "%d",&n);
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        scanf(
            "%d",&mat1[i][j]);
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        scanf(
            "%d",&mat2[i][j]);
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        scanf(
            "%d",&mat3[i][j]);
                
            for(i=0;i<n;i++)
                    te1[i]
            =rand()%100;
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        te2[i]
            +=te1[j]*mat1[j][i];
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        te3[i]
            +=te2[j]*mat2[j][i];
                
            for(i=0;i<n;i++)
                    
            for(j=0;j<n;j++)
                        te4[i]
            +=te1[j]*mat3[j][i];
                
            for(i=0;i<n;i++)
                    
            if(te3[i]!=te4[i])
                    
            {
                        puts(
            "NO");
                        
            return 0;
                    }

                puts(
            "YES");


                
            return 0;
            }




            posted on 2010-08-27 18:20 若余 閱讀(1588) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆檔案(16)

            搜索

            最新隨筆

            最新評(píng)論

            評(píng)論排行榜

            久久综合九色综合网站| 久久久久国产亚洲AV麻豆| 久久99国产综合精品女同| 丁香久久婷婷国产午夜视频| 久久久久黑人强伦姧人妻| 久久精品国产99国产精品导航| 99久久无码一区人妻a黑| 久久久久久A亚洲欧洲AV冫| 久久精品国产第一区二区三区 | 久久久久国产精品嫩草影院| 72种姿势欧美久久久久大黄蕉| 久久久国产精华液| 色综合久久中文色婷婷| 性做久久久久久久| 欧美激情精品久久久久久| 国产∨亚洲V天堂无码久久久| 欧美一区二区久久精品| 久久av免费天堂小草播放| 1000部精品久久久久久久久| 久久久久人妻一区二区三区| 欧美激情精品久久久久久| 久久综合九色综合久99| 久久精品国产第一区二区三区| 欧美伊人久久大香线蕉综合| 欧美日韩中文字幕久久久不卡| 国产成人无码精品久久久久免费| 久久亚洲美女精品国产精品| 久久九九兔免费精品6| 亚洲精品综合久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久亚洲春色中文字幕久久久| 国产精品久久久久久久人人看| 三级片免费观看久久| 国产高清美女一级a毛片久久w| 久久亚洲国产欧洲精品一| 久久久久久狠狠丁香| 亚洲午夜精品久久久久久人妖| 久久精品国产精品国产精品污| 久久精品女人天堂AV麻| 国产精品无码久久综合网| 麻豆精品久久久一区二区|