青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

DraculaW

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  19 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks

#

手機的英文智能輸入法其實很簡單的想法 使用哈希來實現(xiàn) 呵呵

1       2       3
,.    abc    def

4       5       6
ghi    jkl    mno

7       8       9
pqrs tuv   wxyz

譬如說輸入 43
進入這個哈希里面去尋找
key[43] -> [if] -> [he] -> [id] -> [ie]-> [ge] -> [gf] -> 0
還可以輸入更多的 呵呵。

以此類推,如果是拼音輸入也是一樣,只不過要多進行一次哈希。從拼音哈希到具體的漢字里面去。

不過拼音輸入的狀態(tài)機應該更復雜一些。因為拼音輸入可以根據(jù)前一個字來推斷可能出現(xiàn)的下一個字。

其實 不只是手機,只要是使用數(shù)字鍵盤的機器都可以使用這樣子的輸入法。

使用這種算法的變種還可以實現(xiàn)一個好玩的游戲:就是輸入一個單詞,然后輸出所有與它組成元素相同的單詞(就是輸入stop 它可以輸出tops等單詞)。具體也是使用哈希。哈希真是一個好算法
posted @ 2007-11-15 20:37 DraculaW 閱讀(342) | 評論 (0)編輯 收藏

template<typename T>
void prefix(T* p, int m, int* next)
{
       int i, j;
       i = 0;
       j = next[0] = -1;
       while (i < m) {
           while (j > -1 && p[i] != p[j])
                     j = next[j];
           i++;
           j++;
           if (p[i] == p[j])
                     next[i] = next[j];
           else
                     next[i] = j;
       }
}
/* ---------- end of function prefix ---------- */

/*****************************************************************************
* Function : KMP                                                            *
* T     *t : The string need be matching                                    *
* int    n : The length of the string                                       *
* T     *p : The sub string to matching                                     *
* int    m : The length of the p                                            *
* int *out : An array mark the string match where ( max length is m - n )   *
*****************************************************************************/
template<typename T>
int KMP(T* t, int n, T* p, int m, int* out)
{
          int c = 0;
    int i, j, next[m];
    prefix(p, m, next);
    i = 0;
    j = 0;
    while(i < n)
    {
        while( j > -1 && p[j] != t[i])
            j = next[j];
        i++; j++;
        if( j >= m )
        {       
            out[c++] = i - m;
            j = next[j];
        }
    }
          return c;
}
/* ---------- end of function KMP ---------- */

// 這個算法 也研究了很久了。對于他的原理 我早已經(jīng)清楚,但是快速的寫出他還是不是那么順利。也是因為我寫的程序太少了吧 呵呵。 理解中記憶。 嗯 不能死記硬背啊 呵呵。
posted @ 2007-11-15 20:36 DraculaW 閱讀(95) | 評論 (0)編輯 收藏

#ifndef _BIGNUM_HPP_
#define _BIGNUM_HPP_

#include <vector>
#include <string>
#include <iostream>

using namespace std;

class BigNum;

BigNum operator+(const BigNum& lhs, const BigNum& rhs);

ostream& operator<<(ostream& os, const BigNum& rhs);

void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);

class BigNum
{
public:
    BigNum(int n) : value(n){}
    BigNum(const string& s);
    friend BigNum operator+(const BigNum& lhs, const BigNum& rhs);
    friend ostream& operator<<(ostream& os, const BigNum& rhs);
    friend void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);
private:
    vector<char> value;   
};

#endif

#include "BigNum.hpp"

BigNum::BigNum(const string& s):value(s.length())
{
    int j = value.size();
    for(string::const_iterator it = s.begin(); it != s.end(); it++)
    {
        j--;       
        value[j] = *it;
    }
}

ostream& operator<<(ostream& os, const BigNum& rhs)
{
    size_t i = rhs.value.size();
    bool zero = false;
    if( i == 1)
        return os << rhs.value[0];

    if(rhs.value[ i - 1 ] == '0')
        zero = true;
   
    while( i > 0 )
    {
        i--;
        while(zero == true)
        {
            i--;
            if(rhs.value[i] != '0')
                zero = false;
        }
        os << rhs.value[i];
    }
    return os;
}

void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res)
{
    int carry = 0;
    char c = 0;
    char tmp = 0;
    size_t i = 0;
    for( ; i < rhs.value.size(); i++)
    {
        tmp = lhs.value[i] + rhs.value[i] + carry - '0';

        if( tmp > '9' )
        {
            carry = 1;
            tmp -= 10;
        }
        else
        {
            carry = 0;
        }
        res.value[i] = tmp;
    }

    while( carry != 0 && i < lhs.value.size() )
    {
        tmp = lhs.value[i] + carry;
        if( tmp > '9' )
        {
            carry = 1;
            tmp = '0';
        }
        else
        {
            carry = 0;
        }
        res.value[i] = tmp;
        i++;
    }

    if( carry > 0)
        res.value[i] = '1';

}

BigNum operator+(const BigNum& lhs, const BigNum& rhs)
{
    size_t lsize, rsize;
    lsize = lhs.value.size();
           rsize = rhs.value.size();
    size_t n = lsize > rsize ? lsize : rsize;   
    BigNum res(n + 1);
    res.value[0] = '0';
   
    if( lsize > rsize )
    {
             Add(lhs, rhs, res);
    }
    else
    {
        Add(rhs, lhs, res);
    }
   
    return res;
}

//我自己實現(xiàn)的大數(shù)的加法的程序。。 終于驗證可以使用了 呵呵
這個程序?qū)懞昧?也算可以了了我的心愿了的
去年的某個時候 在杭州的UT斯達康面試 上機題就是這一道 我死活沒有憋出來,當時就很后悔 為什么不好好的看看論壇上的帖子 對上面的問題做做呢?那樣子的話 也許我就不會這么悲慘了,老是在哪里自怨自唉。
總結(jié)起來 我其實是眼高手低,然后從來都被寵著沒有認清過自己。小學初中,老媽老師都說我數(shù)學學的還不錯,其實是有點小聰明,分數(shù)還是那么可憐的一點點;到高中,因 為學校比較一般,考的名次看起來很美,被假象迷惑了;大學,因為自己有點基礎(chǔ),被給哥封為軟件最好,也有點沾沾自喜;到了這個公司,也許因為我身體的原 因,也有點面試時做題速度超快的原因,被經(jīng)理說我程序不錯,還是沒有擺正自己的位子。
受點挫折才好。嗯
呵呵, 心態(tài) , 心態(tài)才是一切。
不要眼高手低
posted @ 2007-11-15 20:35 DraculaW 閱讀(206) | 評論 (0)編輯 收藏


// 給一個鏈表 list 將 list 倒置
// 有很多種做法
// 1 遞歸 (速度最慢)
// 2 用個棧 (速度慢)
// 3 三個指針遍歷 (大部分的做法)
//

// 具體就是一個 node*的數(shù)組 有三個元素
// 每次都將 a[1]的放入a[0] a[2]的放入a[1] a[2]->next放入a[2]
// 再將a[1]->next = a[0];
//

void resv_Linklist(Node* head)
{
    Node* a[3];
    a[0] = a[1] = NULL;
    a[2] = head;
    while(a[2]->next)
    {
        a[0] = a[1];
        a[1] = a[2];
        a[2] = a[2]->next;
        a[1]->next = a[0];
    }
    *head = *(a[2]);
}
posted @ 2007-11-15 20:34 DraculaW 閱讀(440) | 評論 (0)編輯 收藏

// 給一個數(shù)組 a[n] = {0, 1, 2, 3, 4, 5, 6} 一個k=3
// 將 a[n]變?yōu)?a[n] = {3, 4, 5, 6, 0, 1, 2}
// 具體的算法是
// 先將 a[n] 變?yōu)閧2, 1, 0, 6, 5, 4, 3}
// 再把 a[n] 逆轉(zhuǎn)了

void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

void resv(int* a, int start, int end)
{
    end = end-1;

    while(start < end)
    {
        swap(a+start, a+end);
        start--, ed--;
    }
}

void resver(int *a, int size, int k)
{
    resv(a, 0, k);
    resv(a, k, size);
    resv(a, 0, size);
}
posted @ 2007-11-15 20:33 DraculaW 閱讀(257) | 評論 (0)編輯 收藏


// 給一個數(shù)組a[n]求其中 第k大的數(shù)值的算法
// 基本的思想就是 使用quicksort的一個變種
// 每次進行完part后 判斷它的返回值 是否為k
// 如果為k 返回
// 如果大于k 則在返回的位置的前面找
// 如果小于k 則在返回的位置的后面找

int part(int* a, int start, int end)
{
    int t = a[end-1];
    int e = -2;
    while(start < e)
    {
        while(a[start]<t) start++;
        while(a[e]>t) e--;
        int tmp = a[e];
        a[e] = a[start];
        a[start] = tmp;
    }
    return start;
}



int findK(int* a, int start, int end, int k)
{
    int i = part(a, start, end);
    int rtn;

    if(i < k-1)
    {
        rtn = findK(a, i+1, end);
    }

    else if(i > k-1)
    {
        rtn = findK(a, start, i-1);
    }
    else
    {
        rtn = a[i];
    }

    return rtn;
}
posted @ 2007-11-15 20:31 DraculaW 閱讀(862) | 評論 (1)編輯 收藏

#ifndef _LINKEDLIST_H_

#define _LINKEDLIST_H_



#include <stdexcept>



using namespace std;



class EmptyListException : public logic_error {



public:

    EmptyListException(const string& what_arg ) throw() :

      logic_error ("Empty list exception: " + what_arg) {}}

;



template <class T>

class Node {

private:

    T data;

    Node* next;



public:

    Node(T d, Node* n = NULL) : data(d), next(n) {}

    T& getData() { return data;}

    Node*& getNext() { return next;}



};



template <class T>

class LinkedList {



protected:



    Node<T>* head; // Beginning of list

    Node<T>* tail; // End of list

    int count; // Number of nodes in list



public:



    LinkedList(void) : head(NULL), tail(NULL), count(0) {}

    LinkedList(const LinkedList<T>& src); // Copy constructor

    virtual ~LinkedList(void); // Destructor



    virtual T& front(void) {



        if (head == NULL) {

            throw EmptyListException("front()");

        }

        return head->getData();

    }

    virtual T& back(void) {

        if (tail == NULL) {

            throw EmptyListException("back()");

        }

        return tail->getData();

    }

    virtual int size(void) {

        return count;

    }

    virtual bool empty(void) {

        return count == 0;

    }



    virtual void push_front(T); // Insert element at beginning

    virtual void push_back(T); // Insert element at end

    virtual void pop_front(void); // Remove element from beginning

    virtual void pop_back(void); // Remove element from end



    virtual void dump(void); // Output contents of list

};



// Copy constructor

template <class T>

LinkedList<T>::LinkedList(const LinkedList<T>& src) :

count(0), head(NULL), tail(NULL) {



    Node<T>* current = src.head;

    while (current != NULL) {

        this->push_back(current->getData());

        current = current->getNext();

    }



}



// Destructor

template <class T>

LinkedList<T>::~LinkedList(void) {



    while (!this->empty()) {

        this->pop_front();

    }

}



// Insert an element at the beginning

template <class T>

void LinkedList<T>::push_front(T d) {



    Node<T>* new_head = new Node<T>(d, head);



    if (this->empty()) {

        head = tail = new_head;

    }

    else {

        head = new_head;

    }

    count++;

}



// Insert an element at the end

template <class T>

void LinkedList<T>::push_back(T d) {



    Node<T>* new_tail = new Node<T>(d, NULL);



    if (this->empty()) {

        head = new_tail;

    }

    else {

        tail->getNext() = new_tail;

    }



    tail = new_tail;

    count++;

}



// Remove an element from the beginning

template <class T>

void LinkedList<T>::pop_front(void) {



    if (head == NULL) {

        throw EmptyListException("pop_front()");

    }



    Node<T>* old_head = head;



    if (this->size() == 1) {

        head = NULL;

        tail = NULL;

    }

    else {

        head = head->getNext();

    }



    delete old_head;

    count--;

}



// Remove an element from the end

template <class T>

void LinkedList<T>::pop_back(void) {



    if (tail == NULL) {

        throw EmptyListException("pop_back()");

    }



    Node<T>* old_tail = tail;



    if (this->size() == 1) {

        head = NULL;

        tail = NULL;

    }

    else {



        // Traverse the list

        Node<T>* current = head;

        while (current->getNext() != tail) {

            current = current->getNext();

        }



        // Unlink and reposition

        current->getNext() = NULL;

        tail = current;

    }



    delete old_tail;

    count--;

}



// Display the contents of the list

template <class T>

void LinkedList<T>::dump(void) {



    cout << "(";



    if (head != NULL) {

        Node<T>* current = head;

        while (current->getNext() != NULL) {

            cout << current->getData() << ", ";

            current = current->getNext();

        }

        cout << current->getData();

    }



    cout << ")" << endl;

}



#endif



#ifndef _ENHANCELINKLIST_H_

#define _ENHANCELINKLIST_H_



#include "LinkedList.h"



template<typename T>

class EnhancedLinkedList: public LinkedList<T>

{

public:

    T& find_first (const T& key);

    //Method find_first should search the EnhancedLinkedList for the first

    //occurrence of an item that matches the value in the parameter key.

    //It should return a reference to the first matching item.

    //If the invoking EnhancedLinkedList object is empty or no item is found

    //that matches the parameter, a ListItemNotFoundException should be thrown.

    //You will have to define this exception

    //(Hint: define this exception much the same way that the

    //EmptyListException exception is defined in LinkedList.h).



    EnhancedLinkedList find_all (const T& key);

    //Method find_all should search the invoking EnhancedLinkedList

    //for all elements that match the value in the parameter key.

    //It should return an EnhancedLinkedList object containing

    //copies of all the items that match the parameter key.

    //If the invoking EnhancedLinkedList object is empty or

    //no item is found that matches the parameter,

    //this function should return an empty EnhancedLinkedList.



    void remove_first (const T& key);

    //Method remove_first should remove the first element from the

    //invoking EnhancedLinkedList whose data item matches the parameter key.

    //If the invoking EnhancedLinkedList object is empty or no item is found

    //that matches the parameter, this function should do nothing.

    //Remember to leave no memory leaks.



    void remove_all (const T& key);

    //Method remove_all should remove all elements from the invoking

    //EnhancedLinkedList whose data items match the parameter key.

    //If the invoking EnhancedLinkedList object is empty or no item is found

    //that matches the parameter, this function should do nothing.

    //Remember to leave no memory leaks.

};



template<typename T>

T& EnhancedLinkedList<T>::find_first(const T& key)

{

    Node<T>* temp = this->head;

    if(temp == NULL)

        throw EmptyListException("Find first emptylist");



    while(NULL != temp->getNext())

    {

        if(temp->getData()==key)

            return temp->getData();

        else

            temp=temp->getNext();

    }



    throw EmptyListException("Find first not found");

}



template<typename T>

EnhancedLinkedList<T>

EnhancedLinkedList<T>::find_all(const T& key)

{

    EnhancedLinkedList<T> resualt;



    Node<T>* temp = this->head;



    while(NULL != temp)

    {

        if(temp->getData()==key)

            resualt.push_back(temp->getData());

        temp=temp->getNext();

    }


end:
    return resualt;

}



template<typename T>

void

EnhancedLinkedList<T>::remove_first(const T& key)

{

    EnhancedLinkedList<T> list;



    while(NULL!=this->head)

    {

        if(this->head->getData()!=key)

            list.push_front(this->head->getData());

        else{

            T* temp = this->front();

            this->pop_front();

            delete temp;

            break;

        }

        this->pop_front();

    }



    while(list.head!=NULL)

    {

        this->push_front(list.front());

        list.pop_front();

    }

}



template<typename T>

void

EnhancedLinkedList<T>::remove_all(const T& key)

{

    EnhancedLinkedList<T> list;



    while(NULL!=this->head)

    {

        if(this->head->getData()!=key){

            list.push_front(this->head->getData());

            this->pop_front();

        }

        else{

            T* temp = this->front();

            this->pop_front();

            delete temp;

        }

    }



    while(list.head!=NULL)

    {

        this->push_front(list.front());

        list.pop_front();

    }

}



#endif //_ENHANCELINKLIST_H_
posted @ 2007-11-15 20:29 DraculaW 閱讀(286) | 評論 (0)編輯 收藏

/////////////////////////////////////////////////////////////////////////////////

// The Sort //

// //

/////////////////////////////////////////////////////////////////////////////////
#ifndef _SORT_H_

#define _SORT_H_
/////////////////////////////////////////////////////////////////////////////////

// The QuickSort //

// //

/////////////////////////////////////////////////////////////////////////////////
template<typename T>

int Quick(T* a, int s, int e)

{

    T t = a[e];

    int i = s - 1;

    for(int j = s; j < e; j++ )

        if(a[j] <= t)

        {

            i++;

            swap(a[j],a[i]);

        }



        swap(a[i+1], a[e]);

        return i+1;

}
template<typename T>

void QuickSort(T* a, int s, int e)

{

    if( s < e )

    {

        int i = Quick(a, s, e);

        //int i = part(a, s, e);

        QuickSort(a, s, i-1);

        QuickSort(a, i+1, e);

    }

}
/////////////////////////////////////////////////////////////////////////////////

// The HeapSort //

// //

/////////////////////////////////////////////////////////////////////////////////

inline int left(int i)

{

    return 2*i+1;

}
inline int right(int i)

{

    return 2*i+2;

}
template<typename T>

void HeapHy(T* a, int n, int i)

{

    int big = i;

    //first find the lage of i, left(i),right(i)

    if(left(i) < n)

    {

        big = a[i]>a[left(i)]?(i):(left(i));

        if(right(i) < n)

            big = a[big]>a[right(i)]?(big):(right(i));

    }

    //and if the i not the biggest change pos i with the bigest

    if(i!=big)

    {

        swap(a[i], a[big]);

        //then HeapHy(a, n, bigest)

        HeapHy(a, n, big);

    }

}
template<typename T>

void BuildHeap(T* a, int n)

{

    for(int i = n/2; i > -1; i--)

        HeapHy(a, n, i);

}
template<typename T>

void HeapSort(T* a, int n)

{

    BuildHeap(a, n);

    for(int i=n-1; i>0; i--)

    {

        swap(a[0], a[i]);

        HeapHy(a, i, 0);

    }

}
/////////////////////////////////////////////////////////////////////////////////

// The ShellSort //

// //

/////////////////////////////////////////////////////////////////////////////////
template<typename T>

void ShellSort(T* a, int s)

{

    T t;

    int i,j,k;

    for(i=s/2; i>0; i=i/3)

    {

        for(j=i; j<s; j++)

        {

            t = a[j];

            for(k=j-i; k>-1; k-=i)

            {

                if(a[k]>t)

                    a[k+i] = a[k];

            }

            a[k+i] = t;

        }

    }

}
#endif //_SORT_H_
posted @ 2007-11-15 20:27 DraculaW 閱讀(147) | 評論 (0)編輯 收藏

呵呵
posted @ 2007-11-15 20:22 DraculaW 閱讀(487) | 評論 (5)編輯 收藏

僅列出標題
共2頁: 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久噜噜噜久久狠狠50岁| 一区二区三区视频免费在线观看| 国产一区日韩一区| 国产精品视频99| 国产精品视频网站| 国产日韩精品在线| 韩日在线一区| 亚洲国产精品久久精品怡红院| 亚洲国产精品高清久久久| 亚洲激情在线视频| 亚洲美女91| 午夜免费日韩视频| 久久久综合激的五月天| 欧美xart系列在线观看| 欧美超级免费视 在线| 欧美成人免费视频| 国产精品99久久99久久久二8| 亚洲综合清纯丝袜自拍| 久久久国产成人精品| 欧美精品一区二区在线观看| 国产精品乱码人人做人人爱| 国产亚洲精品成人av久久ww| 91久久精品国产| 亚洲欧美日韩电影| 欧美1区免费| 亚洲一区在线观看视频 | 精品99一区二区| 亚洲日本无吗高清不卡| 午夜精品久久久久久久99樱桃| 久久婷婷国产综合尤物精品| 国产欧美精品一区| 久久久久一区二区| 欧美成人性网| 国产精品亚洲аv天堂网| 亚洲电影在线播放| 亚洲欧美一区二区三区极速播放| 久久久亚洲国产天美传媒修理工| 亚洲第一网站免费视频| 亚洲狠狠丁香婷婷综合久久久| 欧美一级午夜免费电影| 欧美日韩综合视频| 91久久精品久久国产性色也91| 久久国产精品第一页| 一本不卡影院| 欧美成人日韩| 在线精品视频一区二区| 亚洲欧美激情四射在线日| 亚洲国产第一| 久久一综合视频| 国产一区二区电影在线观看 | 欧美在线观看天堂一区二区三区| 亚洲毛片av| 欧美激情一级片一区二区| 亚洲国产成人精品女人久久久 | 欧美尤物一区| 亚洲午夜av电影| 欧美日韩国产综合视频在线观看中文| 在线观看成人一级片| 久久男女视频| 久久精品国产69国产精品亚洲| 国产精品国产精品| 亚洲日韩成人| 亚洲激情电影中文字幕| 欧美gay视频激情| 亚洲精品一区二区在线| 亚洲激情第一页| 欧美日韩在线另类| 亚洲深夜福利网站| 亚洲午夜视频在线观看| 国产精品日韩精品| 久久精品72免费观看| 久久av资源网站| 在线不卡免费欧美| 亚洲人久久久| 国产精品mv在线观看| 亚洲欧美福利一区二区| 亚洲男人av电影| 极品av少妇一区二区| 欧美国产日韩亚洲一区| 欧美日韩少妇| 性久久久久久久| 欧美在线三级| 日韩天堂av| 亚洲欧美日本日韩| 亚洲福利小视频| 国产精品久久影院| 亚洲大胆av| av成人毛片| 国产精品h在线观看| 久久裸体艺术| 欧美伦理视频网站| 久久99在线观看| 久久综合九色九九| 亚洲欧美日韩一区二区三区在线| 午夜精品久久久久久久久| 亚洲国产精品精华液2区45 | 久久免费的精品国产v∧| 99国产精品国产精品久久| 亚洲性视频网址| 国产一区二区三区四区hd| 欧美激情一区二区三区在线视频观看 | 欧美深夜影院| 久久亚洲精品一区二区| 欧美日韩亚洲一区三区| 美国十次了思思久久精品导航| 欧美激情综合色| 久久琪琪电影院| 欧美视频第二页| 欧美国产成人精品| 国产日本欧美一区二区三区在线 | 亚洲国产精品t66y| 亚洲一区国产视频| 99爱精品视频| 你懂的一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲精品一区二区三区蜜桃久| 亚洲伊人网站| 一本一本久久a久久精品牛牛影视| 欧美影院成人| 午夜国产不卡在线观看视频| 欧美顶级大胆免费视频| 美女日韩欧美| 红桃av永久久久| 午夜激情亚洲| 亚洲欧美日韩中文视频| 欧美日韩免费视频| 亚洲日本欧美| 亚洲精品极品| 欧美不卡在线视频| 欧美激情视频一区二区三区在线播放 | 欧美一区免费| 国产精品igao视频网网址不卡日韩| 亚洲经典在线看| 亚洲欧洲视频| 久久综合网络一区二区| 能在线观看的日韩av| 在线电影欧美日韩一区二区私密| 国产精品久久久久永久免费观看| 亚洲国产精品一区二区三区| 国外成人网址| 久久蜜桃精品| 美女国产一区| 91久久精品国产91久久| 欧美激情国产精品| 亚洲精品极品| 亚洲视频一二区| 国产精品久久久久9999高清| 亚洲视频在线观看三级| 欧美在线免费视频| 国产亚洲欧美日韩一区二区| 午夜视黄欧洲亚洲| 麻豆精品91| 日韩视频永久免费| 欧美图区在线视频| 亚洲欧美日韩一区二区三区在线| 久久成人精品无人区| 韩国三级电影久久久久久| 六月婷婷一区| 日韩香蕉视频| 欧美专区第一页| 1000部国产精品成人观看| 欧美肥婆在线| 亚洲免费在线观看视频| 噜噜噜噜噜久久久久久91| 亚洲激情六月丁香| 欧美视频中文一区二区三区在线观看| 99精品视频免费| 久久久人人人| 日韩午夜激情电影| 国产精品青草久久| 六月婷婷久久| 亚洲在线中文字幕| 欧美激情按摩| 久久精品成人一区二区三区| 亚洲激情欧美| 国产一区二区三区在线观看视频| 欧美电影在线观看| 久久aⅴ国产欧美74aaa| 亚洲人成人一区二区三区| 欧美诱惑福利视频| 亚洲美女av电影| 黄色亚洲精品| 国产精品久久久久久久一区探花| 久久免费视频这里只有精品| 99视频超级精品| 欧美大片一区| 久久精品中文字幕一区二区三区| 日韩手机在线导航| 136国产福利精品导航网址应用| 欧美视频一区二区| 嫩草成人www欧美| 久久精品一区二区三区中文字幕| 99精品欧美一区二区三区综合在线| 免费观看不卡av| 欧美影院久久久| 亚洲免费网址| 一区二区日韩伦理片| 亚洲日本va在线观看| 激情久久婷婷| 国产一区二区三区在线观看精品|