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

            巢穴

            about:blank

            #

            P2352

            為樹狀樹組量身打造的題...
            不過我是線段樹..

            #include <iostream>
            #include 
            <stdio.h>
            using namespace std;
            const int MAXN=32005;
            struct node
            {
             
            int l,r;
             
            int d;
            }
            ;
            node t[MAXN
            *4];
            int ans[MAXN];
            void build(int l_,int r_,int p)
            {
             t[p].l
            =l_;
             t[p].r
            =r_;
             t[p].d
            =0;
             
            if (l_!=r_)
             
            {
              build(l_,(l_
            +r_)/2,p<<1);
              build((l_
            +r_)/2+1,r_,(p<<1)+1);
             }

            }


            int find(int r_,int p)
            {
                
            if (t[p].r<=r_) return t[p].d;
                
            int l=t[p].l;
                
            int r=t[p].r; 
                
            int sum=0;
                
            if (r_<=(l+r)/2) sum+=find(r_,p*2);
                   
            else sum+=t[p*2].d+find(r_,p*2+1);
                
            return sum;
            }

            void insert(int x,int p)
            {
                
            int l=t[p].l;
                
            int r=t[p].r;
                t[p].d
            ++;
                
            if (l==r) return;
                
            if (x<=(l+r)/2) insert(x,p*2); else insert(x,p*2+1);  
            }

            int n;
            int main()
            {
                memset(ans,
            0,sizeof(ans));
                build(
            0,MAXN,1);
                cin
            >>n;
                
            for (int i=1;i<=n;i++)
                
            {
                 
            int x,y;
                 scanf(
            "%d %d",&x,&y);
                 ans[find(x,
            1)]++;
                 insert(x,
            1);
                }

                
            for (int i=0;i<n;i++)
                 cout
            <<ans[i]<<endl;
              
            //  system("pause");
                return 0;
            }

            posted @ 2009-10-15 18:08 Vincent 閱讀(162) | 評論 (0)編輯 收藏

            P2418

            可用2叉樹.可用快排掃描統計,可直接用map....

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


            int main()
            {
                    map 
            < string , int> tree;
                    
            char temp[50] ;
                    
            string str;
                    
            int total=0;
                    
            while(gets(temp))
                    
            {
                            str
            =temp;
                            tree[aaa]
            ++;
                            total
            ++;
                    }

                    map
            <string,int>::iterator itr;
                    
            for(itr = tree.begin(); itr != tree.end(); itr++)
                    
            {
                            cout
            <<itr -> first<<" ";
                            printf(
            "%.4lf\n",100*double(itr -> second)/double(total));
                    }

                    
            return 0;
            }

            posted @ 2009-10-15 12:07 Vincent 閱讀(125) | 評論 (0)編輯 收藏

            P1001

            orz.啊..orz..
            就是一個普通的高精度..注意下格式的細節就可以..
            - -我用的dev c++..忘寫#include <string>編譯過了..
            然后提交的時候不知道..就編譯錯誤...
            然后把重載運算符改成了普通方法..
            然后把class改成了struct..
            總只有點暈..
            后來才發現是少寫了#include......

            #include <iostream>
            #include 
            <string>
            #include 
            <math.h>
            using namespace std;
            const int MAXN=10000;
            struct Decimal 
            {
              
            private:
                      
            int len;//總長度 
                      int point_pos;//小數點位置 
                      int number[MAXN];//具體數 
              public:
                     Decimal();
                     Decimal(
            string);
                     
            void print();
                     Decimal ch(Decimal);
            }
            ;
            Decimal::Decimal()
            {
            }

            Decimal Decimal::ch(Decimal x)
            {
             
            int num[MAXN],n_len=0;
             memset(num,
            0,sizeof(num));
             n_len
            =x.len+Decimal::len;
             
            for (int i=1;i<=x.len;i++)
             
            {
              
            for (int j=1;j<=Decimal::len;j++)
              
            {
               num[i
            +j-1]+=x.number[i]*Decimal::number[j];
               num[i
            +j]+=num[i+j-1]/10;
               num[i
            +j-1]%=10;  
              }

             }

             
            int point_pos=x.point_pos+Decimal::point_pos;
             
            if (num[n_len]==0) n_len--;
             Decimal result;
             result.len
            =n_len;
             result.point_pos
            =point_pos;
             
            for (int i=1;i<=n_len;i++)
                 result.number[i]
            =num[i];
             
            return result;
            }


            Decimal::Decimal(
            string x)
            {
             
             
            int i=x.length();
             
            int sign=0;
             
            for (int j=0;j<x.length();j++)
                 
            if (x[j]=='.') sign=1;
             
            int point_pos=0;
             
            int len=i-sign;

             i
            =len;
             
            for (int j=0;j<x.length();j++)
             
            {
                 
            if (x[j]=='.') point_pos=i;
                 
            if (x[j]<='9'&&x[j]>='0')
                 
            {
                  number[i
            --]=x[j]-48;
                  
            //cout<<number[i]<<endl;
                 }

             }

             Decimal::point_pos
            =point_pos;
             Decimal::len
            =len;
            }


            void Decimal::print()
            {

             
            int pe=1;
             
            while (number[pe]==0&&pe<=point_pos) pe++;
             
            int p=len;
             
            while (number[p]==0&&p>point_pos&&point_pos>pe) p--;
             
            //cout<<pe<<endl;
             for (int i=p;i>=pe;i--)
             
            {
              
            if (point_pos==i) cout<<".";
              cout
            <<number[i];
             }

             cout
            <<endl;
            }

            int main()
            {

                
            string x;
                
            int n;
                
                
            while(cin>>x>>n)
                
            {
                 Decimal d(x);
                
            // d.print();
                 Decimal result("1.0");
               
            //  result.print();
                 for (int i=1;i<=n;i++)
                 
            {
                  result
            =result.ch(d);
                 }

                 result.print();
                }

                system(
            "pause");
                
            return 0;
            }

            posted @ 2009-10-14 22:34 Vincent 閱讀(205) | 評論 (0)編輯 收藏

            P3349

            hash..
            tle了2次都沒有想起來是我用了輸入輸出流的原因..
            后來看了討論才想起來...
            呃.這題代碼寫的有點orz
            #include <iostream>
            #include 
            <stdio.h>
            using namespace std;
            const int MAXN=100000;
            const long mod=999991;
            int n;
            long hash[mod];
            long c[7];
            int len=-1;
            struct node
            {
              
            long c[7];
              
            long son;
            }
            ;
            bool isFind=false;
            node list[MAXN];
            int p[13];
            void find_node(long x)
            {
             
            for (int i=1;i<=6;i++)
             
            {
              
            int count=0;
              
            for (int j=i;j<=i+6-1;j++)
              
            {
               
            if (p[j]==list[x].c[j-i+1]) count++;
              }

              
            if (count==6)
              
            {
                isFind
            =true;
                
            return;
              }

              count
            =0;
              
            for (int j=i;j<=i+6-1;j++)
              
            {
               
            if (p[j]==list[x].c[6-(j-i+1)+1]) count++;   
              }

              
            if (count==6)
              
            {
                isFind
            =true;
                
            return;
              }

             }

             
             
            if (list[x].son!=-1) find_node(list[x].son);
             
            else
             
            {
                 len
            ++;
                 list[x].son
            =len;
                 list[len].son
            =-1;
                 
            for (int i=1;i<=6;i++)
                 
            {
                    list[len].c[i]
            =c[i];
                 }

                 
            return;
                 
             }

             
            }

            void find(long x)
            {
                 
            if (hash[x]==-1)
                 
            {
                   len
            ++;
                   hash[x]
            =len;
                   list[len].son
            =-1;
                   
            for (int i=1;i<=6;i++)
                   
            {
                    list[len].c[i]
            =c[i];
                   }

                   
            return;
                 }

                
            // cout<<x<<endl;
                 for (int i=1;i<=6;i++)
                   p[i]
            =c[i];
                 
            for (int i=7;i<=12;i++)
                   p[i]
            =c[i-6];
                 find_node(hash[x]);
            }

            int main()
            {
                scanf(
            "%ld",&n);
                
            for (int i=0;i<mod;i++)
                    hash[i]
            =-1;
               
            // memset(hash,-1,sizeof(hash));
                for (int i=1;i<=n;i++)
                
            {
                    
            long ans=0;
                    
            for (int j=1;j<=6;j++)
                    
            {
                        scanf(
            "%ld",c+j);
                        ans
            +=c[j];
                    }

                    
            long x=ans%mod;
                  
            //  cout<<x<<endl;
                    find(x);
                    
                }

                
            if (isFind) cout<<"Twin snowflakes found."<<endl;
                
            else
                    cout
            <<"No two snowflakes are alike."<<endl;   
                
            //system("pause");
                return 0;
                
            }

            posted @ 2009-10-13 21:28 Vincent 閱讀(142) | 評論 (0)編輯 收藏

            P3481

                 摘要: 裸treap...學會了刪除..orz.. #include <iostream>//#include <fstream>using namespace std;//ifstream fin("t3481.in");const int MAXN=100000;const int IN...  閱讀全文

            posted @ 2009-10-13 16:23 Vincent 閱讀(84) | 評論 (0)編輯 收藏

            NOI2004 cashier

                 摘要: treap..有幾個地方寫的很尷尬...其實我沒寫過平衡樹...任何的平衡樹..所以我就把對于size的維護寫錯了..orz..然后我又把砍掉一棵子樹那部分寫錯了..我感覺這樣砍樹是會造成一定的不平衡的..但不平衡會很小.呃..其實也不能這么說..應該說..會造成不平衡..但這個不平衡帶給我的負擔不會高于我曾經的負擔..orz..貌似是這樣 #include <iostream&...  閱讀全文

            posted @ 2009-10-13 11:27 Vincent 閱讀(252) | 評論 (0)編輯 收藏

            P3020

            2分圖
            構圖
            兩個集合是一樣的,都是所有的*號
            如果某兩個*之間挨著,就連線
            求最大匹配
            可以輕易得出這個最大匹配把每個*都求了2遍
            因此除以2,再加上未匹配的*,得解..
            難點就是構圖..
            事實上匹配,網絡流等的難點也就是構圖

            #include <iostream>
            //#include <fstream>
            using namespace std;
            //ifstream fin("t3020.in");
            struct node
            {
             
            int x,y;
            }
            ;
            const int MAXN=401;
            node edge[MAXN];
            bool connect[MAXN][MAXN];
            bool hash[MAXN];
            int v[MAXN];
            int n;
            int h,w;
            int len;

            bool find(int x)
            {
                 
            for (int i=1;i<=len;i++)
                 
            {
                     
            if (!connect[x][i]) continue;
                     
            if (!hash[i])
                     
            {
                      hash[i]
            =true;
                      
            if (v[i]==0||find(v[i]))
                      
            {
                       v[i]
            =x;
                       
            return true;
                      }

                     }

                 }

                 
            return false;
            }

            int main()
            {
                cin
            >>n;
                
            while(n--)
                
            {
                 cin
            >>h>>w;
                 len
            =0;
                 
            for (int i=1;i<=h;i++)
                  
            for (int j=1;j<=w;j++)
                  
            {
                   
            char ch;
                   cin
            >>ch;
                   
            if ('*'==ch)
                   
            {
                    len
            ++;
                    edge[len].x
            =i;
                    edge[len].y
            =j;
                   }

                  }

                 
                 
            //init
                 memset(connect,0,sizeof(connect));
                 
            for (int i=1;i<=len;i++)
                  
            for (int j=1;j<=len;j++)
                  
            {
                   
            if (i==j) continue;
                   
            if (1==abs(edge[i].x-edge[j].x)+abs(edge[i].y-edge[j].y))
                      connect[i][j]
            =true;
                  }

                 
                 
            //
                 memset(v,0,sizeof(v));
                 
            int answer=0,ans=0;
                 
            for (int i=1;i<=len;i++)
                 
            {
                  memset(hash,
            0,sizeof(hash));
                  
            if (find(i)) answer++;
                  
            else
                   ans
            ++;
                 }

                 cout
            <<answer/2+ans<<endl;
                
            // system("pause");
                }

                
            return 0;
            }


             

            posted @ 2009-10-08 11:58 Vincent 閱讀(100) | 評論 (0)編輯 收藏

            P3041

            2分圖/匈牙利
            第一遍寫疵了..
            #include <iostream>
            #include 
            <fstream>
            using namespace std;


            const int MAXN=501;
            int n,k;
            bool edge[MAXN][MAXN];
            bool hash[MAXN];
            int v[MAXN];
            bool find(int x)
            {

                 
            for (int j=1;j<=n;j++)
                 
            {
                  
            if  (!edge[x][j]) continue;
                  
            if (!hash[j])
                  
            {
                   hash[j]
            =true;
                   
            if (v[j]==0||find(v[j]))
                   
            {
                    v[j]
            =x;
                    
            return true;
                   }

                  }

                 }

                 
            return false;
            }

            int main()
            {
                memset(edge,
            0,sizeof(edge));
                

                cin
            >>n>>k;
                
                
            for (int i=1;i<=k;i++)
                
            {
                    
            int x,y;
                    cin
            >>x>>y;
                    edge[x][y]
            =true;
                }

                
            int count=0;
                
            for (int i=1;i<=n;i++)
                
            {
                    memset(hash,
            0,sizeof(hash));
                    
            if (find(i)) count++
                }

                cout
            <<count<<endl;
              
            // system("pause");
                return 0;
            }

            posted @ 2009-10-07 19:21 Vincent 閱讀(87) | 評論 (0)編輯 收藏

            P1094

            拓撲排序..
            這個真是WA了n多次..orz..
            總之就是有很多細節..因為結果的可能性太多..而樣例實在是只給了太少的可能性- -..

            #include <iostream>
            #include 
            <queue>
            #include 
            <string>
            using namespace std;
            int n,m;
            const int MAXN=27;
            bool edge[MAXN][MAXN];
            int d[MAXN];
            int state;


            void jude(int ix)
            {
                 state
            =0;
                 
            string str="";
                 
            int count=0;
                 queue
            <int> q;
                 
            int u[MAXN];
                 
            for (int i=1;i<=n;i++)
                 
            {   
                      u[i]
            =d[i];
                    
            //  cout<<u[i]<<endl;
                      if (0==d[i]) q.push(i);
                 }

                 
            if (q.size()>1{state=3;}
                 
            while(q.size()>0)
                 
            {
                  
            int v=q.front();
                  
            int c_ount=0;
                  
            for (int i=1;i<=n;i++)
                      
            if (edge[i][v])
                      
            {
                       u[i]
            --;
                       
            if (0==u[i]) {c_ount++;q.push(i);}
                      }

                  
            if (c_ount>1{state=3;}
                  q.pop();count
            ++;str=char(v+64)+str;
                 }

                
            // cout<<count<<" "<<n<<endl;
                 if (count<n)
                 
            {
                  cout
            <<"Inconsistency found after "<<ix<<" relations."<<endl;
                  state
            =2;return;
                 }

                 
            if (state==3return;
                 cout
            <<"Sorted sequence determined after "<<ix<<" relations: ";
                 cout
            <<str<<"."<<endl;
                 state
            =1;return;
                 
            }

            int main()
            {
                
            while(1)
                
            {           
                 memset(edge,
            0,sizeof(edge));
                 memset(d,
            0,sizeof(d));
                 state
            =0;  
                 cin
            >>n>>m;     
                 
            if (0==n&&0==m) break;
                 
            char str[3];
                 
            for (int i=1;i<=m;i++)
                 
            {
                 
                     cin
            >>str;
                     
            if (state==1continue;
                     
            if (state==2continue;
                     
            int x=int(str[0])-64;
                     
            int y=int(str[2])-64;
                     
            if (edge[x][y]) continue;
                     d[x]
            =d[x]+1;
                     edge[x][y]
            =true;
                     jude(i);

                 }

                 
            if (state==3) cout<<"Sorted sequence cannot be determined."<<endl;
                 
                }

                
            return 0;
            }

            posted @ 2009-10-07 18:25 Vincent 閱讀(137) | 評論 (0)編輯 收藏

            P1258 By kruskal

            kruskal..
            /*
            Kruskal
            */

            #include 
            <iostream>
            using namespace std;

            const int MAXN=101;
            const int INF=0x7fffffff;
            int n;
            struct node
            {
                   
            int x,y;
                   
            int value;
            }
            ;
            node edge[MAXN
            *MAXN+1];
            bool hash[MAXN];
            int dist[MAXN];
            int father[MAXN];
            int len;
            void sort(int l,int r)
            {
                 
            int ll=l,rr=r,mid=edge[(l+r)/2].value;
                 
            while(ll<=rr)
                 
            {
                  
            while (edge[ll].value<mid) ll++;
                  
            while (edge[rr].value>mid) rr--;
                  
            if (ll<=rr)
                  
            {
                   swap(edge[ll],edge[rr]);
                   ll
            ++;
                   rr
            --;
                  }

                 }

                 
            if (ll<r) sort(ll,r);
                 
            if (rr>l) sort(l,rr);
            }

            int getFather(int x)
            {
                
            if (x==father[x]) return x;
                father[x]
            =getFather(father[x]);
                x
            =father[x];
                
            return x;
            }

            void kruskal()
            {
                 sort(
            1,len);
                 
            for (int i=0;i<n;i++)
                     father[i]
            =i;
                 
            int ans=0;
                 
            for (int i=1;i<=len;i++)
                 
            {
                     
            int fx=getFather(edge[i].x);
                     
            int fy=getFather(edge[i].y);
                     
            if (fx!=fy)
                     
            {
                      ans
            +=edge[i].value;
                      father[fx]
            =fy;
                     }

                 }

                 cout
            <<ans<<endl;
            }


            int main()
            {
                
            while(cin>>n)
                
            {
                 len
            =0;
                 
            for (int i=0;i<n;i++)
                  
            for (int j=0;j<n;j++)
                  
            {
                      
            int x;    
                      cin
            >>x;
                      
            if (i==j) continue;
                      node p;
                      p.x
            =i;p.y=j;p.value=x;
                      edge[
            ++len]=p;
                  }

                 kruskal();
                }

                
                
            return 0;
            }

            posted @ 2009-10-07 15:26 Vincent 閱讀(483) | 評論 (0)編輯 收藏

            僅列出標題
            共8頁: 1 2 3 4 5 6 7 8 
            国产精品天天影视久久综合网| 中文字幕无码久久人妻| 伊人久久精品无码二区麻豆| 久久精品二区| 精品久久人人妻人人做精品| 国产国产成人精品久久| 久久久久久无码Av成人影院| 久久综合狠狠综合久久综合88| 久久婷婷五月综合成人D啪 | 久久久久无码精品国产| 久久大香萑太香蕉av| 久久精品综合一区二区三区| 91精品国产91久久久久久蜜臀 | 天天爽天天爽天天片a久久网| 欧美喷潮久久久XXXXx| 久久久久成人精品无码中文字幕| 亚洲午夜久久久影院伊人| 久久精品亚洲中文字幕无码麻豆| 久久亚洲私人国产精品| 97久久精品无码一区二区天美| 亚洲国产欧洲综合997久久| 人妻精品久久无码专区精东影业| 久久精品国产亚洲av水果派 | 久久99精品国产| 亚洲综合久久综合激情久久| 久久国产香蕉一区精品| 无码乱码观看精品久久| 久久无码高潮喷水| 久久精品亚洲精品国产色婷| 麻豆精品久久精品色综合| 久久996热精品xxxx| 久久人妻少妇嫩草AV蜜桃| 久久精品无码专区免费青青| 99久久夜色精品国产网站| 欧美激情精品久久久久久| 久久久久se色偷偷亚洲精品av| 久久精品aⅴ无码中文字字幕重口| 欧美午夜精品久久久久久浪潮| 国产精品青草久久久久福利99| 亚洲精品成人网久久久久久| 色综合久久中文字幕无码 |