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

            Uriel's Corner

            Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
            posts - 0, comments - 50, trackbacks - 0, articles - 594

            POJ 3699 miniSQL---模擬

            Posted on 2010-04-03 20:35 Uriel 閱讀(462) 評論(0)  編輯 收藏 引用 所屬分類: POJ模擬
                    這題快一年前就看了,覺得太麻煩就一直沒做,昨天心情不爽于是又拿來做找刺激。。結果完全杯具。。今天晚上才過掉。。
                    昨天寫的方法是:先把要輸出的那個表格存進一個char型數組,覺得這樣輸出的時候不那么糾結。。但是這題沒說STR型的數據最多多長,于是不停的提交來試。。結果就是MLE, RE, WA, OLE, TLE...加起來快60次。。以為是哪里沒考慮到,于是-0這樣的惡心數據也考慮了,負數也考慮了,空數據也考慮了。。還是一次次的杯具。。
                    最后實在受不了了,于是改方法,不存結果,最后一行一行輸出。。竟然一下就過了。。。但是G++還是TLE,不知原因啊。。也許memset太多了。。
                    都不知道這題到底什么trick了。。能考慮的都考慮了。。(知道的只有-0的情況不要考慮),代碼夾雜了一堆調試的語句和第一種方法的部分。。也懶得改了。。貼個代碼。。哪位一樣被這題虐的ACMer可以對拍下數據什么的。。具體代碼就不要看了。。丑陋至極。。10527B。。

            /*
              Problem: 3699  User: Uriel 
              Memory: 21832K  Time: 157MS 
              Language: C++  Result: Accepted 
            */

            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #include
            <algorithm>
            using namespace std; 

            #define MAXN 10001

            char P[MAXN][11][201];
            int n;//col總數
            int m;//記錄總數 
            int qry;//每個詢問有多少個屬性
            int k;//共有幾個詢問 
            int q;//0->'='; 1->'<'; 2->'>'
            int si;//0->限制條件為int,1->限制條件為string
            int nres;//滿足條件的結果數 
            int cons;//限制條件是第幾個col
            char xd[11][201];//存需要輸出的屬性的名字 
            int id[11];//存要輸出的屬性的代號 
            int kind[11];//每個col的數據類型,0為string,1為int
            char col[11][201];//每個col的名字
            int res[MAXN];//存滿足限制條件的結果的序號(輸入序號,非ID)
            int width,height;//最后結果的寬和高
            //char ans[MAXN+5][3200];//存最后要輸出的結果 
            int val;
            int maxl;  
            char str[301];
            char sample[301];
            char type[11];//暫存每個col數值類型 
            char tmps[10];//去掉select,where 
            int maxdis[11];//輸出每一格的最大寬度 

            int main()
            {
                
            int i,j,h; 
                
            char c;
                memset(P,
            0x00,sizeof(P));
            //    freopen("out.txt","w",stdout);
                scanf("%d %d %d",&n,&m,&k);
                
            for(i=0;i<n;i++)
                
            {
                    scanf(
            "%s %s",col[i],type);
            //        printf("*%s %s*\n",col[i],type);
                    if(strcmp(type,"STR")==0)
                    
            {
                        kind[i]
            =1;
                    }

                    
            else
                    
            {
                        kind[i]
            =0;
                    }

                }

                
            for(i=0;i<m;i++)
                
            {
                    
            for(j=0;j<n;j++)
                    
            {
                        scanf(
            "%s",P[i][j]);
            //            printf("* %d *\n",kind[j]);
            //            if(kind[j]==0 && P[i][j][0]=='-' && P[i][j][1]=='0')
            //            {
            //                printf("*");
            //                P[i][j][0]='0';
            //                P[i][j][1]='\0';
            //            }
            //            printf("*%s*\n",P[i][j]);
                    }

                }

                
            while(k--)
                
            {
                    scanf(
            "%s",tmps);
            //        printf("*%s*\n",tmps);
                    getchar();
                    qry
            =0;
                    memset(xd,
            0x00,sizeof(xd));
                    
            while(1)
                    

                        
            int tmp=0;
                        
            while(1)
                        
            {
                            c
            =getchar();
                            
            if(c==' ')
                            
            {
                                qry
            ++;
                                
            goto flag;
                            }

                            
            else if(c==',')break;
                            
            else
                                xd[qry][tmp
            ++]=c;
                        }

            //            printf("* %s *\n",xd[qry]);
                        qry++;
                    }

            //      for(i=0;i<qry;i++)
            //        {
            //          printf("* %s *\n",xd[i]);
            //      }
            flag:    for(i=0;i<qry;i++)
                    
            {
                        
            for(j=0;j<n;j++)
                        
            {
                            
            if(strcmp(xd[i],col[j])==0)
                            
            {
                                id[i]
            =j;
            //                    printf("id[%d]=%d\n",i,j);
                                break;
                            }

                        }

                    }

                    j
            =0;
            //        getchar();
                    scanf("%s",tmps);
            //        printf("* %s *\n",tmps);
                    getchar();
                    memset(str,
            0x00,sizeof(str));
                    
            while(1)
                    
            {
                        c
            =getchar();
                        
            if(c=='=')
                        
            {
            //                printf("* %s *\n",str);
                            q=0;
                            
            for(i=0;i<n;i++)
                            
            {
                                
            if(strcmp(col[i],str)==0)
                                
            {
                                    cons
            =i;
                                    
            break;
                                }

                            }

            //                cons=i;
                            if(kind[i]==1)
                            
            {
                                si
            =1;
                                
            while(c=getchar()==' ')getchar();
            //                    getchar();//去掉第一個"
                                scanf("%s",sample);
            //                    printf("%s\n",sample);
                                sample[strlen(sample)-1]='\0';//去掉第二個"
            //                    printf("sample=%s\n",sample);
                            }

                            
            else
                            
            {
                                si
            =0;
                                scanf(
            "%s",sample);
            //                    printf("sample=%s\n",sample);
                                val=atoi(sample);
            /*                    if(sample[0]=='-')
                                {          
                                    val=(-1)*(sample[1]-'0');          
                                    for(i=2;i<strlen(sample);i++)
                                    {
                                        val=val*10+sample[i]-'0';
                                    }
                                }
                                else
                                {
                                    for(i=0;i<strlen(sample);i++)
                                    {
                                        val=val*10+sample[i]-'0';
                                    }
                                }               
            */
             
                            }

                            
            break;
                        }

                        
            else if(c=='<')
                        
            {
            //                printf("* %s *\n",str);
                            q=1;
                            si
            =0;
                            
            for(i=0;i<n;i++)
                            
            {
                                
            if(strcmp(col[i],str)==0)
                                
            {
                                    cons
            =i;
                                    
            break;
                                }

                            }

            //                cons=i;
                            scanf("%s",sample);
            //                printf("sample=%s\n",sample);
                            val=atoi(sample);
            /*                if(sample[0]=='-')
                            {          
                                val=(-1)*(sample[1]-'0');          
                                for(i=2;i<strlen(sample);i++)
                                {
                                    val=val*10+sample[i]-'0';
                                }
                            }
                            else
                            {
                                for(i=0;i<strlen(sample);i++)
                                {
                                    val=val*10+sample[i]-'0';
                                }
                            }               
            */

                            
            break;
                        }

                        
            else if(c=='>')
                        
            {
            //                printf("* %s *\n",str);
                            q=2;
                            si
            =0;
                            
            for(i=0;i<n;i++)
                            
            {
                                
            if(strcmp(col[i],str)==0)
                                
            {
                                    cons
            =i;
                                    
            break;
                                }

                            }

            //                cons=i;
            //                printf("cons=%d\n",cons);
                            scanf("%s",sample);
            //                printf("sample=%s\n",sample);
                            val=atoi(sample);
            /*                if(sample[0]=='-')
                            {          
                                val=(-1)*(sample[1]-'0');          
                                for(i=2;i<strlen(sample);i++)
                                {
                                    val=val*10+sample[i]-'0';
                                }
                            }
                            else
                            {
                                for(i=0;i<strlen(sample);i++)
                                {
                                    val=val*10+sample[i]-'0';
                                }
                            }               
            */

                            
            break;
                        }

                        
            else if(c==' ')continue;
                        
            else
                            str[j
            ++]=c;
                    }

            //        printf("val=%d\n",val);
            //        printf("sample=%s\n",sample);
            //        memset(res,0,sizeof(res));
            //        memset(ans,0x00,sizeof(ans));
                    nres=0;
                    
            if(!si)//限制條件是數字類型
                    {
            //            printf("*");
                        if(q==0)
                        
            {
                            
            for(i=0;i<m;i++)
                            
            {
                                
            if(atoi(P[i][cons])==val)
                                
            {
                                    res[nres
            ++]=i;
                                }

                            }

                        }

                        
            else if(q==1)
                        
            {
                            
            for(i=0;i<m;i++)
                            
            {
                                
            if(atoi(P[i][cons])<val)
                                
            {
                                    res[nres
            ++]=i;
                                }

                            }

                        }

                        
            else if(q==2)
                        
            {
                            
            for(i=0;i<m;i++)
                            
            {
            //                    printf("tmp=%d\n",atoi(P[i][cons]));
                                if(atoi(P[i][cons])>val)
                                
            {
                                    res[nres
            ++]=i;
            //                        printf("*\n");
                                }

                            }

                        }

                    }

                    
            else 
                    
            {
            //            printf("dd\n");
                        for(i=0;i<m;i++)
                        
            {
                            
            if(strcmp(P[i][cons],sample)==0)
                            
            {
                                res[nres
            ++]=i;
            //                    printf("res=%d\n",i);
                            }

                        }

                    }

            //        for(i=0;i<nres;i++)
            //        {
            //            printf("res=%d\n",res[i]);
            //        }
            //        memset(ans,0x00,sizeof(ans));
            /*------------------------------------------------------------------------        
                    ans[0][0]='+';
                    width=0;
                    height=nres+4;
            //        printf("high=%d\n",height);
                    for(i=1;i<height-1;i++)
                    {
                        ans[i][0]='|';
                    } 
                    ans[i][0]='+';
            //        for(i=0;i<height;i++)
            //          {
            //           for(j=0;j<1;j++)
            //            {
            //                printf("%c",ans[i][j]);
            //            }
            //            printf("\n");
            //        }          
            //        break;   
            //        printf("nres=%d\n",nres);
                    for(j=0;j<qry;j++)
                    {
            //            printf("width=%d\n",width);
                        maxl=strlen(col[id[j]]);//每格的寬度 
            //            printf("maxl=%d\n",maxl);
                        for(i=0;i<nres;i++)
                        {
                            if(strlen(P[res[i]][id[j]])>maxl)maxl=strlen(P[res[i]][id[j]]);
                        }
                        maxl+=2; 
            //            printf("maxl=%d\n",maxl);
            //            width+=maxl;
                        for(i=width+1;i<=width+maxl;i++)
                        {
                            ans[2][i]='-';
                        }
                        for(i=1;i<height-1;i++)
                        {
                            ans[i][width+maxl+1]='|';
                        }
                        for(i=width+1;i<=width+maxl;i++)
                        {
                            ans[1][i]=' ';
                        }
            //            printf("maxl=%d\nwidth=%d\n",maxl,width);
                        strcpy(&ans[1][width+(maxl-strlen(col[id[j]]))/2+1],col[id[j]]);
                        for(i=0;i<nres;i++)
                        {
                            for(h=width+1;h<width+maxl+1;h++)
                            {
                                ans[i+3][h]=' ';
                            }
                            strcpy(&ans[i+3][width+(maxl-strlen(P[res[i]][id[j]]))/2+1],P[res[i]][id[j]]);
                        }               
                        width=width+maxl+1;
                    }    
                    for(i=0;i<height;i++)
                    {
                        for(j=0;j<width;j++)
                        {
                            ans[i][j]=' ';
                        }
                    }               
            //        printf("width=%d\n",width);
            //        printf("height=%d\n",height);
                    for(i=1;i<width;i++)
                    {
                        ans[0][i]='-';
                        ans[height-1][i]='-';
                    }
                    ans[0][width]='+';
                    ans[height-1][width]='+'; 
            //        for(i=0;i<m;i++)
            //        {
            //            for(j=0;j<n;j++)
            //            {
            //                printf("%s ",P[i][j]);
            //            }
            //            printf("\n");
            //        }                           
                    for(i=0;i<height;i++)
                      {
                        for(j=0;j<=width;j++)
                        {
                            printf("%c",ans[i][j]);
                        }
                        printf("\n");   
                    }            
            ------------------------------------------------------------------------
            */
               
                    width
            =1;
            //        printf("qry=%d\n",qry);
                    for(i=0;i<qry;i++)
                    
            {
                        maxdis[i]
            =strlen(col[id[i]]);
                        
            for(j=0;j<nres;j++)    
                        
            {
                            
            if(maxdis[i]<strlen(P[res[j]][id[i]]))
                            
            {
                                maxdis[i]
            =strlen(P[res[j]][id[i]]);
                            }

                        }

                        maxdis[i]
            +=2;
            //            printf("dis=%d\n",maxdis[i]);
                        width+=maxdis[i]+1;
                    }

                    printf(
            "+");
                    
            for(i=1;i<width-1;i++)
                    
            {
                        printf(
            "-");
                    }

                    printf(
            "+\n");
                    printf(
            "|");
                    
            for(i=0;i<qry;i++)
                    
            {
                        
            for(j=0;j<(maxdis[i]-strlen(col[id[i]]))/2;j++)
                        
            {
                            printf(
            " ");
                        }

                        printf(
            "%s",col[id[i]]);
                        
            for(j=0;j<(maxdis[i]-strlen(col[id[i]])+1)/2;j++)
                        
            {
                            printf(
            " ");
                        }

                        printf(
            "|");
                    }

                    printf(
            "\n");
                    printf(
            "|");
                    
            for(i=0;i<qry;i++)
                    
            {
                        
            for(j=0;j<maxdis[i];j++)
                        
            {
                            printf(
            "-");
                        }

                        printf(
            "|");
                    }

                    printf(
            "\n");
                    
            for(i=0;i<nres;i++)
                    
            {
                        printf(
            "|");
                        
            for(j=0;j<qry;j++)
                        
            {              
                            
            for(h=0;h<(maxdis[j]-strlen(P[res[i]][id[j]]))/2;h++)
                            
            {
                                printf(
            " ");
                            }

                            printf(
            "%s",P[res[i]][id[j]]);
                            
            for(h=0;h<(maxdis[j]-strlen(P[res[i]][id[j]]+1))/2;h++)
                            
            {
                                printf(
            " ");
                            }

                            printf(
            "|");
                        }

                        printf(
            "\n");
                    }

                    printf(
            "+");
                    
            for(i=1;i<width-1;i++)
                    
            {
                        printf(
            "-");
                    }

                    printf(
            "+\n");    
                    printf(
            "\n");
                }

            //    system("PAUSE");
                return 0;
            }



            思思久久精品在热线热| 久久精品国产精品亚洲人人| 久久亚洲AV永久无码精品| 国产精品欧美久久久久天天影视 | 99久久国产综合精品麻豆| 亚洲精品无码久久一线| 亚洲精品乱码久久久久久久久久久久| 麻豆亚洲AV永久无码精品久久| www.久久热.com| 久久久久精品国产亚洲AV无码| 99久久99久久久精品齐齐| 亚洲精品久久久www| 大香网伊人久久综合网2020| 亚洲午夜久久久影院伊人| 色综合久久88色综合天天 | 狠狠久久亚洲欧美专区| 久久只有这里有精品4| 99久久精品国产一区二区三区| 亚洲人成精品久久久久| 久久久久亚洲AV成人网| 狠色狠色狠狠色综合久久| 久久久久久久女国产乱让韩| 久久性生大片免费观看性| 久久se精品一区精品二区国产 | 久久免费小视频| 91精品国产乱码久久久久久| 久久国产免费直播| 久久婷婷五月综合97色直播| 久久午夜免费视频| 无码国内精品久久综合88| 久久综合鬼色88久久精品综合自在自线噜噜| 免费观看成人久久网免费观看| 99久久无色码中文字幕| 久久超碰97人人做人人爱| 久久发布国产伦子伦精品| 国产精品久久午夜夜伦鲁鲁| 久久99精品久久久久子伦| 99国产欧美久久久精品蜜芽| 精品久久久久久中文字幕| 久久综合九色综合精品| 婷婷久久综合九色综合98|