[
  {
    "path": ".gitignore",
    "content": "# C++ objects and libs\r\n\r\n*.slo\r\n*.lo\r\n*.o\r\n*.a\r\n*.la\r\n*.lai\r\n*.so\r\n*.dll\r\n*.dylib\r\n\r\n# Qt-es\r\n\r\n/.qmake.cache\r\n/.qmake.stash\r\n*.pro.user\r\n*.pro.user.*\r\n*.qbs.user\r\n*.qbs.user.*\r\n*.moc\r\nmoc_*.cpp\r\nqrc_*.cpp\r\nui_*.h\r\nMakefile*\r\n*build-*\r\n\r\n# QtCreator\r\n\r\n*.autosave\r\n\r\n# QtCtreator Qml\r\n*.qmlproject.user\r\n*.qmlproject.user.*\r\n\r\n# QtCtreator CMake\r\nCMakeLists.txt.user"
  },
  {
    "path": "BinaryTreeRebuild/BinaryTreeRebuild.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    binaryTreeRebuild.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\nDISTFILES += \\\r\n    Ŀ.txt\r\n\r\n"
  },
  {
    "path": "BinaryTreeRebuild/binaryTreeRebuild.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n\r\n#define MAX 10000001\r\nusing namespace std;\r\n\r\n\r\nint preOder[MAX];\r\nint postOder[MAX];\r\nchar buffer[MAX];//缓冲区，减少IO操作，缩短读入数据时间\r\nint findPos(int source[],int len,int key)\r\n{\r\n    int count;\r\n    for(count = 0;count < len;count++)\r\n    {\r\n        if(source[count] == key)\r\n        {\r\n            return count;\r\n        }\r\n    }\r\n}\r\n\r\nvoid rebuild(int preTree[],int postTree[],int len)\r\n{\r\n    int limit;\r\n    if(len == 1)\r\n    {\r\n        printf(\"%d \",preTree[0]);\r\n        return;\r\n    }\r\n    limit = findPos(postTree,len,preTree[1]);//找到左右子树分界点\r\n    rebuild(preTree+1,postTree,limit+1);\r\n    printf(\"%d \",preTree[0]);\r\n    rebuild(preTree+limit+1+1,postTree+limit+1,len - limit -1-1);\r\n\r\n}\r\n\r\nint main()\r\n{\r\n    int n;\r\n    scanf(\"%d\",&n);\r\n    setvbuf(stdin,buffer,_IOFBF,MAX);\r\n    for(int i=0;i<n;i++)\r\n    {\r\n        scanf(\"%d\",&preOder[i]);\r\n    }\r\n    for(int i=0;i<n;i++)\r\n    {\r\n        scanf(\"%d\",&postOder[i]);\r\n    }\r\n    rebuild(preOder,postOder,n);\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "BinaryTreeRebuild/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "BinaryTreeRebuild/题目.txt",
    "content": "真二叉树重构(Proper Rebuild)\nDescription\nIn general, given the preorder traversal sequence and postorder traversal sequence of a binary tree, we cannot determine the binary tree.\n\n\n\nFigure 1\n\nIn Figure 1 for example, although they are two different binary tree, their preorder traversal sequence and postorder traversal sequence are both of the same.\n\nBut for one proper binary tree, in which each internal node has two sons, we can uniquely determine it through its given preorder traversal sequence and postorder traversal sequence.\n\nLabel n nodes in one binary tree using the integers in [1, n], we would like to output the inorder traversal sequence of a binary tree through its preorder and postorder traversal sequence.\n\nInput\nThe 1st line is an integer n, i.e., the number of nodes in one given binary tree,\n\nThe 2nd and 3rd lines are the given preorder and postorder traversal sequence respectively.\n\nOutput\nThe inorder traversal sequence of the given binary tree in one line.\n\nExample\nInput\n\n5\n1 2 4 5 3\n4 5 2 3 1\nOutput\n\n4 2 5 1 3\nRestrictions\nFor 95% of the estimation, 1 <= n <= 1,000,00\n\nFor 100% of the estimation, 1 <= n <= 4,000,000\n\nThe input sequence is a permutation of {1,2...n}, corresponding to a legal binary tree.\n\nTime: 2 sec\n\nMemory: 256 MB\n\nHints\n\n\nFigure 2\n\nIn Figure 2, observe the positions of the left and right children in preorder and postorder traversal sequence.\n\n描述\n一般来说，给定二叉树的先序遍历序列和后序遍历序列，并不能确定唯一确定该二叉树。\n\n\n\n（图一）\n\n比如图一中的两棵二叉树，虽然它们是不同二叉树，但是它们的先序、后序遍历序列都是相同的。\n\n但是对于“真二叉树”（每个内部节点都有两个孩子的二叉树），给定它的先序、后序遍历序列足以完全确定它的结构。\n\n将二叉树的n个节点用[1, n]内的整数进行编号，输入一棵真二叉树的先序、后序遍历序列，请输出它的中序遍历序列。\n\n输入\n第一行为一个整数n，即二叉树中节点的个数。\n\n第二、三行为已知的先序、后序遍历序列。\n\n输出\n仅一行，给定真二叉树的中序遍历序列。\n\n样例\n见英文题面\n\n限制\n对于95%的测例：1 ≤ n ≤ 1,000,000\n\n对于100%的测例：1 ≤ n ≤ 4,000,000\n\n输入的序列是{1,2...n}的排列，且对应于一棵合法的真二叉树\n\n时间：2 sec\n\n空间：256 MB\n\n提示\n\n\n观察左、右孩子在先序、后序遍历序列中的位置\n"
  },
  {
    "path": "BroadCast/BroadCast.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    broadcast.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\nDISTFILES += \\\r\n    Ŀ.txt\r\n\r\n"
  },
  {
    "path": "BroadCast/broadcast.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#define MAX 1000000\r\n\r\nusing namespace std;\r\n//使用邻接表存储图\r\n struct EdgeNode /*边表结点*/\r\n{\r\n    int adjvex; //存储邻接顶点对应下标\r\n    struct EdgeNode *nex;//指向下一个邻接点\r\n};\r\n\r\nstruct VertexNode //顶点表结点\r\n{\r\n    int castType;//广播状态 1\r\n    bool isVisted;\r\n    int data;//数据\r\n    EdgeNode *firstEdge;//边表头指针\r\n};\r\nstruct Graph\r\n{\r\n    VertexNode adjList[MAX];//顶点数组\r\n    int numVertexs;//顶点数\r\n    int numEdges;//边数\r\n\r\n}graph;\r\nVertexNode queue[MAX];//模拟队列\r\nint head=0;\r\nint tail =0;\r\nint queuesize=0;\r\nint main()\r\n{\r\n    int n,m;\r\n    scanf(\"%d%d\",&n,&m);\r\n    graph.numVertexs = n;\r\n    graph.numEdges = m;\r\n    if(m<=1)\r\n    {\r\n        printf(\"1\");\r\n        return 0;\r\n    }\r\n    for(int i=0;i<n;i++)//初始化顶点数组\r\n    {\r\n        graph.adjList[i].data = i+1;//顶点从1开始\r\n        graph.adjList[i].isVisted = false;\r\n        graph.adjList[i].firstEdge = NULL;\r\n    }\r\n    int a,b;\r\n    for(int i=0;i<m;i++)//输入信息并构建邻接表\r\n    {\r\n        scanf(\"%d%d\",&a,&b);//距离小于20km的结点（村庄）视为有边连通\r\n        EdgeNode *ea = new EdgeNode;\r\n        EdgeNode *eb = new EdgeNode;\r\n        ea->adjvex = b-1;//下标从0开始\r\n        eb->adjvex = a-1;\r\n        ea->nex = NULL;\r\n        eb->nex = NULL;\r\n        EdgeNode *pa = graph.adjList[a-1].firstEdge;//无向图 一条边更新两个结点\r\n        EdgeNode *pb = graph.adjList[b-1].firstEdge;\r\n        if( pa == NULL)\r\n        {\r\n            graph.adjList[a-1].firstEdge = ea;\r\n        }\r\n        else\r\n        {\r\n            while( pa->nex != NULL)\r\n            {\r\n                pa = pa->nex;\r\n            }\r\n            pa->nex = ea;\r\n        }\r\n        if( pb == NULL)\r\n        {\r\n            graph.adjList[b-1].firstEdge = eb;\r\n        }\r\n        else\r\n        {\r\n            while( pb->nex != NULL)\r\n            {\r\n                pb = pb->nex;\r\n            }\r\n            pb->nex = eb;\r\n        }\r\n    }\r\n    //BFS\r\n    for(int i=0;i<graph.numVertexs;i++)\r\n    {\r\n        if(!graph.adjList[i].isVisted)\r\n        {\r\n            graph.adjList[i].isVisted = true;\r\n            graph.adjList[i].castType = 1;//广播类型\r\n            queue[tail++] = graph.adjList[i];//结点入队\r\n            queuesize++;\r\n            while(queuesize!=0)\r\n            {\r\n                VertexNode node = queue[head++];//取出队列中第一个结点\r\n                queuesize--;\r\n                EdgeNode *pn = node.firstEdge;\r\n                while( pn != NULL)\r\n                {\r\n                    if(!graph.adjList[pn->adjvex].isVisted)//结点未访问过\r\n                    {\r\n                        graph.adjList[pn->adjvex].isVisted = true;\r\n                        graph.adjList[pn->adjvex].castType = -node.castType;//安装不同类型广播\r\n                        queue[tail++] = graph.adjList[pn->adjvex];//入队\r\n                        queuesize++;\r\n\r\n                    }\r\n                    else\r\n                    {\r\n                        if(node.castType == graph.adjList[pn->adjvex].castType)\r\n                        {\r\n                            printf(\"-1\");//不可行\r\n                            return 0;\r\n                        }\r\n                    }\r\n                    pn = pn->nex;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    printf(\"1\");//可行\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "BroadCast/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "BroadCast/题目.txt",
    "content": "无线广播(Broadcast)\n描述\n某广播公司要在一个地区架设无线广播发射装置。该地区共有n个小镇，每个小镇都要安装一台发射机并播放各自的节目。\n\n不过，该公司只获得了FM104.2和FM98.6两个波段的授权，而使用同一波段的发射机会互相干扰。已知每台发射机的信号覆盖范围是以它为圆心，20km为半径的圆形区域，因此，如果距离小于20km的两个小镇使用同样的波段，那么它们就会由于波段干扰而无法正常收听节目。现在给出这些距离小于20km的小镇列表，试判断该公司能否使得整个地区的居民正常听到广播节目。\n\n输入\n第一行为两个整数n，m，分别为小镇的个数以及接下来小于20km的小镇对的数目。 接下来的m行，每行2个整数，表示两个小镇的距离小于20km（编号从1开始）。\n\n输出\n如果能够满足要求，输出1，否则输出-1。\n\n输入样例\n4 3\n1 2\n1 3\n2 4\n输出样例\n1\n限制\n1 ≤ n ≤ 10000\n\n1 ≤ m ≤ 30000\n\n不需要考虑给定的20km小镇列表的空间特性，比如是否满足三角不等式，是否利用传递性可以推出更多的信息等等。\n\n时间：2 sec\n\n空间：256MB\n\n提示\nBFS\n"
  },
  {
    "path": "DataStructOj.pro",
    "content": "TEMPLATE = subdirs\r\n\r\nSUBDIRS += \\\r\n    RangeSearch \\\r\n    LightHouse \\\r\n    Zuma2 \\\r\n    Train \\\r\n    Tunel \\\r\n    BinaryTreeRebuild \\\r\n    testDeom \\\r\n    TSP \\\r\n    KahnTopsort \\\r\n    Deduplicate \\\r\n    BroadCast \\\r\n    Toy\r\n\r\n"
  },
  {
    "path": "Deduplicate/Deduplicate.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    Depulicate.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\nHEADERS +=\r\n\r\nDISTFILES += \\\r\n    Ŀ.txt\r\n\r\n"
  },
  {
    "path": "Deduplicate/Depulicate.cpp",
    "content": "#include <iostream>\r\n#include <cstring>\r\n#include <cstdio>\r\n#include <cmath>\r\n#define MAX 400003\r\nchar buffer[1000000];//缓冲区，减少IO操作，缩短读入数据时间\r\nusing namespace std;\r\nstruct HashNode\r\n{\r\n  HashNode()\r\n  {\r\n    memset(str,'\\0',41);\r\n    isEmpty = true;\r\n    isDepulicate = false;\r\n  }\r\n  char str[41];//保存字符串\r\n  bool isEmpty;//是否为空\r\n  bool isDepulicate;//是否已有重复\r\n};\r\nstruct HashTable\r\n{\r\n    HashNode bullet[MAX];//存储结点的桶数组\r\n    unsigned int hash(char *str, int len);\r\n    bool put(char *str,int len);//添加元素\r\n    char *depulist[MAX];\r\n    int depulen;//重复字符串数\r\n};\r\n\r\nunsigned int HashTable::hash(char *str,int len)//散列函数\r\n{\r\n    unsigned int keyValue = 0;\r\n   /* for(int i=0;i<len;i++)//hash函数版本1\r\n    {\r\n        keyValue += str[i]*((int)pow(33,len-i));//将字符出现顺序也考虑进去\r\n    }\r\n    keyValue = (keyValue*3 + 7)%MAX;*/\r\n    unsigned int seed = 131;\r\n    unsigned int hash = 0;\r\n    for(int i=0;i<len;i++)//版本2 BKDhash\r\n    {\r\n        hash = hash*seed+str[i];\r\n    }\r\n    keyValue = hash&0x7fffffff;\r\n    return keyValue;\r\n}\r\nbool HashTable::put(char *str, int len)\r\n{\r\n    int index = hash(str,len)%MAX;\r\n    int pre = 1,step = 1;\r\n    while(!bullet[index].isEmpty)\r\n    {\r\n        if(strcmp(bullet[index].str,str) == 0)//相等 重复字符串\r\n        {\r\n            if(!bullet[index].isDepulicate)//多次重复的字符串最后只输出一次\r\n            {\r\n                bullet[index].isDepulicate = true;//已经保存了该重复字符串\r\n                depulist[depulen] = new char[41];\r\n                strcpy(depulist[depulen++],str);\r\n            }\r\n            return false;\r\n        }\r\n        else\r\n        {\r\n            index = (index + pre*step*step)%MAX;\r\n            while(index<0)\r\n            {\r\n                index += MAX;\r\n            }\r\n            pre = -pre;\r\n            step++;\r\n        }\r\n    }\r\n    //存入空桶\r\n    strcpy(bullet[index].str,str);\r\n    bullet[index].isEmpty = false;\r\n    return true;\r\n\r\n}\r\n\r\nint main()\r\n{\r\n    int n;\r\n    HashTable *hashtable = new HashTable;\r\n    char str[41];\r\n    hashtable->depulen = 0;\r\n    scanf(\"%d\",&n);\r\n    setvbuf(stdin,buffer,_IOFBF,1000000);\r\n    for(int i=0;i<n;i++)\r\n    {\r\n        scanf(\"%s\",str);\r\n        hashtable->put(str,strlen(str));\r\n    }\r\n    if(hashtable->depulen > 0)\r\n    {\r\n        for(int i=0;i<hashtable->depulen;i++)\r\n        {\r\n            printf(\"%s\\n\",hashtable->depulist[i]);\r\n        }\r\n    }\r\n    return 0;\r\n}\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "Deduplicate/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "Deduplicate/题目.txt",
    "content": "重名剔除(Deduplicate)\r\nDescription\r\nMr. Epicure is compiling an encyclopedia of food. He had collected a long list of candidates nominated by several belly-gods. As candidates in list are nominated by several people, duplication of name is inevitable. Mr. Epicure pay you a visit for help. He request you to remove all duplication, which is thought an easy task for you. So please hold this opportunity to be famous to all belly-gods.\r\n\r\nInput\r\n1 integer in fist line to denote the length of nomination list. In following n lines, each nomination is given in each line.\r\n\r\nOutput\r\nAll the duplicated nomination (only output once if duplication appears more multiple times), which is sorted in the order that duplication appears firstly.\r\n\r\nExample\r\nInput\r\n\r\n10\r\nbrioche\r\ncamembert\r\ncappelletti\r\nsavarin\r\ncheddar\r\ncappelletti\r\ntortellni\r\ncroissant\r\nbrioche\r\nmapotoufu\r\nOutput\r\n\r\ncappelletti\r\nbrioche\r\nRestrictions\r\n1 < n < 6 * 10^5\r\n\r\nAll nominations are only in lowercase. No other character is included. Length of each item is not greater than 40.\r\n\r\nTime: 2 sec\r\n\r\nMemory: 256 MB\r\n\r\nHints\r\nHash\r\n\r\n描述\r\nEpicure先生正在编撰一本美食百科全书。为此，他已从众多的同好者那里搜集到了一份冗长的美食提名清单。既然源自多人之手，其中自然不乏重复的提名，故必须予以筛除。Epicure先生因此登门求助，并认定此事对你而言不过是“一碟小菜”，相信你不会错过在美食界扬名立万的这一良机\r\n\r\n输入\r\n第1行为1个整数n，表示提名清单的长度。以下n行各为一项提名\r\n\r\n输出\r\n所有出现重复的提名（多次重复的仅输出一次），且以其在原清单中首次出现重复（即第二次出现）的位置为序\r\n\r\n样例\r\n见英文题面\r\n\r\n限制\r\n1 < n < 6 * 10^5\r\n\r\n提名均由小写字母组成，不含其它字符，且每项长度不超过40\r\n\r\n时间：2 sec\r\n\r\n空间：256 MB\r\n\r\n提示\r\n散列\r\n"
  },
  {
    "path": "KahnTopsort/KahnTopsort.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    kahntopsortTSP.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\nDISTFILES += \\\r\n    TSP.txt\r\n\r\n"
  },
  {
    "path": "KahnTopsort/TSP.txt",
    "content": "Description\r\nShrek is a postman working in the mountain, whose routine work is sending mail to n villages. Unfortunately, road between villages is out of repair for long time, such that some road is one-way road. There are even some villages that can’t be reached from any other village. In such a case, we only hope as many villages can receive mails as possible.\r\n\r\nShrek hopes to choose a village A as starting point (He will be air-dropped to this location), then pass by as many villages as possible. Finally, Shrek will arrived at village B. In the travelling process, each villages is only passed by once. You should help Shrek to design the travel route.\r\n\r\nInput\r\nThere are 2 integers, n and m, in first line. Stand for number of village and number of road respectively.\r\n\r\nIn the following m line, m road is given by identity of villages on two terminals. From v1 to v2. The identity of village is in range [1, n].\r\n\r\nOutput\r\nOutput maximum number of villages Shrek can pass by.\r\n\r\nExample\r\nInput\r\n\r\n4 3\r\n1 4\r\n2 4\r\n4 3\r\nOutput\r\n\r\n3\r\nRestrictions\r\n1 <= n <= 1,000,000\r\n\r\n0 <= m <= 1,000,000\r\n\r\nThese is no loop road in the input.\r\n\r\nTime: 2 sec\r\n\r\nMemory: 256 MB\r\n\r\nHints\r\nTopological sorting\r\n\r\n描述\r\nShrek是一个大山里的邮递员，每天负责给所在地区的n个村庄派发信件。但杯具的是，由于道路狭窄，年久失修，村庄间的道路都只能单向通过，甚至有些村庄无法从任意一个村庄到达。这样我们只能希望尽可能多的村庄可以收到投递的信件。\r\n\r\nShrek希望知道如何选定一个村庄A作为起点（我们将他空投到该村庄），依次经过尽可能多的村庄，路途中的每个村庄都经过仅一次，最终到达终点村庄B，完成整个送信过程。这个任务交给你来完成。\r\n\r\n输入\r\n第一行包括两个整数n，m，分别表示村庄的个数以及可以通行的道路的数目。\r\n\r\n以下共m行，每行用两个整数v1和v2表示一条道路，两个整数分别为道路连接的村庄号，道路的方向为从v1至v2，n个村庄编号为[1, n]。\r\n\r\n输出\r\n输出一个数字，表示符合条件的最长道路经过的村庄数。\r\n\r\n样例\r\n见英文题面\r\n\r\n限制\r\n1 ≤ n ≤ 1,000,000\r\n\r\n0 ≤ m ≤ 1,000,000\r\n\r\n输入保证道路之间没有形成环\r\n\r\n时间：2 sec\r\n\r\n空间：256 MB\r\n\r\n提示\r\n拓扑排序\r\n"
  },
  {
    "path": "KahnTopsort/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "KahnTopsort/kahntopsortTSP.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#define MAX 1000000\r\n#define GETMAX(x,y) ((x) > (y) ? (x):(y))\r\nusing namespace std;\r\n\r\n//使用邻接表存储图\r\n struct EdgeNode /*边表结点*/\r\n{\r\n    int adjvex; //存储邻接顶点对应下标\r\n    int length;//到该结点路径长度\r\n    struct EdgeNode *nex;//指向下一个邻接点\r\n};\r\n\r\nstruct VertexNode //顶点表结点\r\n{\r\n    int in; //顶点入度\r\n    int data;//数据\r\n    int length;//到该结点路径长度\r\n    EdgeNode *firstEdge;//边表头指针\r\n};\r\nstruct Graph\r\n{\r\n    VertexNode adjList[MAX];//顶点数组\r\n    int numVertexs;//顶点数\r\n    int numEdges;//边数\r\n\r\n}graph;\r\nint maxLength = 1;\r\nVertexNode topSort[MAX];//保存拓扑排序结果\r\nint main()\r\n{\r\n    int n,m,a,b;\r\n    scanf(\"%d%d\",&n,&m);\r\n    graph.numEdges = m;\r\n    graph.numVertexs = n;\r\n    for(int i=0;i<n;i++)//初始化顶点数组\r\n    {\r\n        graph.adjList[i].data = i+1;\r\n        graph.adjList[i].in = 0;\r\n        graph.adjList[i].length = 1;\r\n        graph.adjList[i].firstEdge = NULL;\r\n    }\r\n    for(int i = 0;i<m;i++)//输入边信息并构建邻接表(拓扑排序) -邻接矩阵（最长路径）\r\n    {\r\n        scanf(\"%d%d\",&a,&b);//输入边的端点\r\n        EdgeNode *e = new EdgeNode;\r\n        e->adjvex = b-1;//数组下标从0开始\r\n        graph.adjList[b-1].in++;//b结点入度加1\r\n        e->nex = NULL;\r\n        EdgeNode *p = graph.adjList[a-1].firstEdge;\r\n        if(p == NULL)\r\n        {\r\n            graph.adjList[a-1].firstEdge = e;\r\n        }\r\n        else\r\n        {\r\n            while (p->nex != NULL)\r\n            {\r\n                p = p->nex;\r\n            }\r\n            p->nex = e;\r\n        }\r\n    }\r\n    int stack[MAX];//拓扑排序时保存入度为0的结点堆栈\r\n    int stk[MAX];//保存初始入度为0结点\r\n    int top = 0,index,num=0,t=0;\r\n    EdgeNode *e;\r\n    for(int i=0;i<graph.numVertexs;i++)\r\n    {\r\n        if(graph.adjList[i].in == 0)\r\n        {\r\n            stack[top++] = i;//保存结点在数组中的下标\r\n            stk[num++] = i;//入度为0结点数\r\n        }\r\n    }\r\n    while(top!=0)//进行拓扑排序\r\n    {\r\n       index = stack[--top];//出栈，取出入度为零的结点\r\n       for(e = graph.adjList[index].firstEdge;e!=NULL;e=e->nex)//遍历该结点的边表\r\n       {\r\n           int tempindex = e->adjvex;\r\n           //动态规划-更新其后继结点的最大路径长度\r\n           graph.adjList[tempindex].length = GETMAX(graph.adjList[index].length+1,\r\n                                                graph.adjList[tempindex].length);\r\n           maxLength = GETMAX(graph.adjList[tempindex].length,maxLength);\r\n           graph.adjList[tempindex].in--;//将邻接点的入度减1\r\n           if(graph.adjList[tempindex].in == 0)\r\n           {\r\n               stack[top++] = tempindex;//入度为0入栈\r\n           }\r\n       }\r\n    }\r\n    printf(\"%d\",maxLength);\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "LightHouse/LightHouse.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#define MAX 1000001\r\nint point_x[MAX];\r\nint point_y[MAX];\r\nint tempL[MAX];\r\nint tempR[MAX];\r\nchar buffer[10000];//缓冲区，减少IO操作，缩短读入数据时间\r\nlong sum = 0;\r\nusing namespace std;\r\nvoid quickSort(int *array_x,int* array_y,int l,int r)\r\n{\r\n    if(l<r)\r\n    {\r\n        int i=l,j=r;\r\n        int temp = array_x[l];\r\n        int temp1 = array_y[l];\r\n        while(i<j)\r\n        {\r\n            while(i<j && array_x[j]>=temp)\r\n                j--;\r\n            if(i<j)\r\n            {\r\n                array_x[i] = array_x[j];\r\n                array_y[i] = array_y[j];\r\n                ++i;\r\n            }\r\n            while(i<j && array_x[i]<=temp)\r\n                i++;\r\n            if(i<j)\r\n            {\r\n                array_x[j] = array_x[i];\r\n                array_y[j] = array_y[i];\r\n                --j;\r\n            }\r\n        }\r\n        array_x[i] = temp;\r\n        array_y[i] = temp1;\r\n        quickSort(array_x,array_y,l,i-1);\r\n        quickSort(array_x,array_y,i+1,r);\r\n    }\r\n\r\n}\r\nvoid Merge(int* array,int l,int mid,int r)\r\n{\r\n    int i,j,k,n1,n2;\r\n    n1 = mid - l +1;\r\n    n2 = r - mid;\r\n    for(i = 0;i<n1;i++)\r\n    {\r\n        tempL[i] = array[l+i];\r\n    }\r\n    for(i=0;i<n2;i++)\r\n    {\r\n        tempR[i] = array[mid+1+i];\r\n    }\r\n    i = 0;\r\n    j = 0;\r\n    for(k=l;k<r && i<n1 && j<n2;k++)\r\n    {\r\n        if(tempL[i]>tempR[j])//题意各点互异，不会有相等情况\r\n        {\r\n            array[k] = tempR[j++];//x大y小 不符合条件\r\n        }\r\n        else\r\n        {\r\n            array[k] = tempL[i++];\r\n            sum += n2 - j;\r\n        }\r\n    }\r\n    while(i<n1)\r\n    {\r\n        array[k++] = tempL[i++];\r\n    }\r\n    while(j<n2)\r\n    {\r\n        array[k++] = tempR[j++];\r\n    }\r\n\r\n}\r\nvoid MergeSort(int *array,int l,int r)\r\n{\r\n    int mid;\r\n    if(l == r)\r\n        return;\r\n    mid = l+((r-l)>>1);\r\n    MergeSort(array,l,mid);\r\n    MergeSort(array,mid+1,r);\r\n    Merge(array,l,mid,r);\r\n}\r\n\r\nint main()\r\n{\r\n\r\n    int n;\r\n    scanf(\"%d\",&n);\r\n    setvbuf(stdin,buffer,_IOFBF,10000);\r\n    for(int i=0;i<n;++i)\r\n    {\r\n        scanf(\"%d %d\",&point_x[i],&point_y[i]);\r\n    }\r\n    quickSort(point_x,point_y,0,n-1);\r\n    MergeSort(point_y,0,n-1);\r\n    printf(\"%ld\",sum);\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "LightHouse/LightHouse.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    LightHouse.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "LightHouse/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "README.md",
    "content": "# TsingHuaDataStructOj\n学堂在线mooc-清华数据结构与算法(邓俊辉) OJ习题\n全部满分AC\n"
  },
  {
    "path": "RangeSearch/RangeSearch.cpp",
    "content": "#include <iostream>\r\n#include <cstdlib>\r\n#include <cstdio>\r\nusing namespace std;\r\nint cmp(const void*a, const void *b)\r\n{\r\n    return *((int *)a) - *((int*)b);\r\n}\r\nint binarySearch(int *array, int e, int lo, int hi, int &flag)//二分查找,左开右闭-返回最接近的\r\n{\r\n    int mid;\r\n    flag = 0;\r\n    while (lo < hi)\r\n    {\r\n        mid = (lo + hi)>>1;\r\n      //  (e<array[mid]) ? (hi = mid ):(flag = 1,lo = mid + 1);//[lo,mid) 或 [mid+1,hi)\r\n        if(e<array[mid])\r\n        {\r\n            hi = mid;\r\n        }\r\n        else\r\n        {\r\n            if(e == array[mid])\r\n                flag = 1;\r\n            lo = mid +1;\r\n        }\r\n    }\r\n    return --lo;//返回最后一个不大于e的下标\r\n}\r\nint main()\r\n{\r\n    int pointNum, cmpNum,count = 0;\r\n    cin >> pointNum >> cmpNum;\r\n    int* array = new int[pointNum];\r\n    int* leftArray = new int[cmpNum];\r\n    int* rightArray = new int[cmpNum];\r\n    for (int i = 0; i < pointNum; i++)\r\n        scanf(\"%d\",&array[i]);\r\n    for (int i = 0; i < cmpNum; i++)\r\n        scanf(\"%d %d\",&leftArray[i],&rightArray[i]);\r\n    qsort(array, pointNum, sizeof(int), cmp);//调用系统快排\r\n    while (cmpNum-- > 0)\r\n    {\r\n        int tem1, tem2,temflag;\r\n        if (leftArray[count] > array[pointNum - 1] || rightArray[count] < array[0])\r\n        {\r\n            printf(\"0\\n\");\r\n        }\r\n        else\r\n        {\r\n            tem1 = binarySearch(array, leftArray[count], 0, pointNum,temflag);\r\n            if(temflag == 1)\r\n            {\r\n               tem1--;\r\n            }\r\n            tem2 = binarySearch(array, rightArray[count], 0, pointNum,temflag);\r\n            printf(\"%d\\n\",tem2 - tem1);\r\n        }\r\n        count++;\r\n    }\r\n    return 0;\r\n}\r\n"
  },
  {
    "path": "RangeSearch/RangeSearch.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    RangeSearch.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "RangeSearch/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "RangeSearch/题目.txt",
    "content": "范围查询(Range)\nDescriptioin\nLet S be a set of n integral points on the x-axis. For each given interval [a, b], you are asked to count the points lying inside.\n\nInput\nThe first line contains two integers: n (size of S) and m (the number of queries).\n\nThe second line enumerates all the n points in S.\n\nEach of the following m lines consists of two integers a and b and defines an query interval [a, b].\n\nOutput\nThe number of points in S lying inside each of the m query intervals.\n\nExample\nInput\n\n5 2\n1 3 7 9 11\n4 6\n7 12\nOutput\n\n0\n3\nRestrictions\n0 <= n, m <= 5 * 10^5\n\nFor each query interval [a, b], it is guaranteed that a <= b.\n\nPoints in S are distinct from each other.\n\nCoordinates of each point as well as the query interval boundaries a and b are non-negative integers not greater than 10^7.\n\nTime: 2 sec\n\nMemory: 256 MB\n\n描述\n数轴上有n个点，对于任一闭区间 [a, b]，试计算落在其内的点数。\n\n输入\n第一行包括两个整数：点的总数n，查询的次数m。\n\n第二行包含n个数，为各个点的坐标。\n\n以下m行，各包含两个整数：查询区间的左、右边界a和b。\n\n输出\n对每次查询，输出落在闭区间[a, b]内点的个数。\n\n样例\n见英文题面\n\n限制\n0 ≤ n, m ≤ 5×105\n\n对于每次查询的区间[a, b]，都有a ≤ b\n\n各点的坐标互异\n\n各点的坐标、查询区间的边界a、b，均为不超过10^7的非负整数\n\n时间：2 sec\n\n内存：256 MB\n"
  },
  {
    "path": "TSP/TSP.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#include <cstdlib>\r\n#define MAX 100\r\n\r\nusing namespace std;\r\n//使用邻接表存储图-基于DFS的拓扑排序\r\nenum STATUS\r\n{\r\n    UNVISTED,\r\n    VISTED\r\n};\r\n struct EdgeNode /*边表结点*/\r\n{\r\n    int adjvex; //存储邻接顶点对应下标\r\n    struct EdgeNode *nex;//指向下一个邻接点\r\n};\r\n\r\nstruct VertexNode //顶点表结点\r\n{\r\n    int out; //顶点出度\r\n    int data;//数据\r\n  //  STATUS status;//是否被访问过\r\n    EdgeNode *firstEdge;//边表头指针\r\n};\r\nstruct Graph //图结构\r\n{\r\n    VertexNode adjList[MAX];//顶点数组\r\n    int numVertexs;//顶点数\r\n    int numEdges;//边数\r\n\r\n}graph;\r\n\r\nint viste(VertexNode *node);//拓扑排序中从后向前访问结点\r\n\r\nint main()\r\n{\r\n    int n,m,a,b;\r\n    scanf(\"%d%d\",&n,&m);\r\n    graph.numVertexs = n;\r\n    graph.numEdges = m;\r\n\r\n    for(int i=0;i<n;i++)//初始化顶点数组\r\n    {\r\n        graph.adjList[i].data = i+1;\r\n        graph.adjList[i].out = 0;\r\n     //   graph.adjList[i].status = UNVISTED;//输出拓扑排序时需要\r\n        graph.adjList[i].firstEdge = NULL;\r\n    }\r\n    for(int i = 0;i<m;i++)//输入边信息并构建逆邻接表(拓扑排序) -邻接矩阵（最长路径）\r\n    {\r\n        scanf(\"%d%d\",&a,&b);//输入边的端点\r\n        EdgeNode *e = new EdgeNode;\r\n        e->adjvex = a-1;//数组下标从0开始\r\n        graph.adjList[a-1].out++;//a结点出度加1\r\n        e->nex = NULL;\r\n        EdgeNode *p = graph.adjList[b-1].firstEdge;\r\n        if(p == NULL)\r\n        {\r\n            graph.adjList[b-1].firstEdge = e;\r\n        }\r\n        else\r\n        {\r\n            while (p->nex != NULL)\r\n            {\r\n                p = p->nex;\r\n            }\r\n            p->nex = e;\r\n        }\r\n    }\r\n    int stack[MAX];//保存出度为0的结点堆栈\r\n    int top = 0,index,sum=0,len=0;\r\n    for(int i=0;i<graph.numVertexs;i++)\r\n    {\r\n        if(graph.adjList[i].out == 0)\r\n        {\r\n            stack[top++] = i;//保存结点在数组中的下标\r\n        }\r\n    }\r\n    while(top!=0)//拓扑排序\r\n    {\r\n        index = stack[--top];\r\n        sum = viste(&graph.adjList[index]);\r\n        if(len<sum)\r\n        {\r\n            len = sum;\r\n        }\r\n    }\r\n    printf(\"%d\",len);\r\n    return 0;\r\n}\r\n//深度优先访问结点-清华OJ超时-未用到拓扑排序结果？待优化\r\nint viste(VertexNode *node)\r\n{\r\n    int len = 1,sublen = 0,maxsublen=0;\r\n   // if(node->status == UNVISTED)//输出拓扑排序时需要该判断\r\n  //  {\r\n      //  node->status = VISTED;\r\n        EdgeNode* e;\r\n        for(e=graph.adjList[node->data-1].firstEdge;e!=NULL;e=e->nex)\r\n        {\r\n           sublen = viste(&graph.adjList[e->adjvex]);\r\n           if(maxsublen <sublen)//求出经过结点最多的子结点\r\n           {\r\n               maxsublen = sublen;\r\n           }\r\n        }\r\n        printf(\"%d \",node->data);\r\n  //  }\r\n    return len+maxsublen;\r\n}\r\n\r\n"
  },
  {
    "path": "TSP/TSP.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    TSP.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\nDISTFILES += \\\r\n    TSP.txt\r\n\r\n"
  },
  {
    "path": "TSP/TSP.txt",
    "content": "Description\r\nShrek is a postman working in the mountain, whose routine work is sending mail to n villages. Unfortunately, road between villages is out of repair for long time, such that some road is one-way road. There are even some villages that can’t be reached from any other village. In such a case, we only hope as many villages can receive mails as possible.\r\n\r\nShrek hopes to choose a village A as starting point (He will be air-dropped to this location), then pass by as many villages as possible. Finally, Shrek will arrived at village B. In the travelling process, each villages is only passed by once. You should help Shrek to design the travel route.\r\n\r\nInput\r\nThere are 2 integers, n and m, in first line. Stand for number of village and number of road respectively.\r\n\r\nIn the following m line, m road is given by identity of villages on two terminals. From v1 to v2. The identity of village is in range [1, n].\r\n\r\nOutput\r\nOutput maximum number of villages Shrek can pass by.\r\n\r\nExample\r\nInput\r\n\r\n4 3\r\n1 4\r\n2 4\r\n4 3\r\nOutput\r\n\r\n3\r\nRestrictions\r\n1 <= n <= 1,000,000\r\n\r\n0 <= m <= 1,000,000\r\n\r\nThese is no loop road in the input.\r\n\r\nTime: 2 sec\r\n\r\nMemory: 256 MB\r\n\r\nHints\r\nTopological sorting\r\n\r\n描述\r\nShrek是一个大山里的邮递员，每天负责给所在地区的n个村庄派发信件。但杯具的是，由于道路狭窄，年久失修，村庄间的道路都只能单向通过，甚至有些村庄无法从任意一个村庄到达。这样我们只能希望尽可能多的村庄可以收到投递的信件。\r\n\r\nShrek希望知道如何选定一个村庄A作为起点（我们将他空投到该村庄），依次经过尽可能多的村庄，路途中的每个村庄都经过仅一次，最终到达终点村庄B，完成整个送信过程。这个任务交给你来完成。\r\n\r\n输入\r\n第一行包括两个整数n，m，分别表示村庄的个数以及可以通行的道路的数目。\r\n\r\n以下共m行，每行用两个整数v1和v2表示一条道路，两个整数分别为道路连接的村庄号，道路的方向为从v1至v2，n个村庄编号为[1, n]。\r\n\r\n输出\r\n输出一个数字，表示符合条件的最长道路经过的村庄数。\r\n\r\n样例\r\n见英文题面\r\n\r\n限制\r\n1 ≤ n ≤ 1,000,000\r\n\r\n0 ≤ m ≤ 1,000,000\r\n\r\n输入保证道路之间没有形成环\r\n\r\n时间：2 sec\r\n\r\n空间：256 MB\r\n\r\n提示\r\n拓扑排序\r\n"
  },
  {
    "path": "TSP/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "Toy/Toy.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    toy.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "Toy/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "Toy/toy.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#include <cstring>\r\n\r\n/*\r\n* 思路：将一串数字看做是一个字符串，其全排列总共有8!,每种排列对应一个状态\r\n* 有的状态能够通过题目所给的操作到达，注意题目要求的是从目标状态恢复初始状态\r\n* 所需步数不是从初始状态到达目标状态所需步数，所以要将题目所给的操作逆转过来，\r\n* 才是计算从目标状态返回初始状态的步数。具体做法是利用康拓变换+BFS搜索遍历，\r\n* 提前将所需步数存储在一个输出数组中，数组的秩就是对应状态的康拓变换值，利用\r\n* BFS不断搜索当前状态的下一状态，没有搜索过的状态步长加1，保存到输出数组中，\r\n* 直至搜索完毕。\r\n*/\r\n#define MAX 40320//8! 全部排列方式有8!种\r\n\r\nint outMap[MAX]= {0};//输出数组\r\nint factor[8] = {1,1,2,6,24,120,720,5040};//阶乘数组\r\nstruct TOY\r\n{\r\n    char str[9];\r\n    int hashVal;//康托变换后的散列值\r\n    TOY()\r\n    {\r\n        hashVal = 0;\r\n    }\r\n    TOY(char *s)\r\n    {\r\n        strcpy(str,s);\r\n        contor();\r\n    }\r\n    void downUpChange(char *s)//下上交换\r\n    {\r\n        for(int i=0;i<8;i++)\r\n        {\r\n            str[7-i] = s[i];\r\n        }\r\n        str[8] = '\\0';\r\n        contor();\r\n    }\r\n    void cycleLeftMove(char *s)//循环左移\r\n    {\r\n        for(int i=0;i<4;i++)\r\n        {\r\n            str[i] = s[(i+1)%4];\r\n        }\r\n        for(int i=4;i<8;i++)\r\n        {\r\n            str[i] = s[(i+3)%4+4];\r\n        }\r\n        str[8] = '\\0';\r\n        contor();\r\n    }\r\n    void centerMove(char *s)//中心逆时针旋转\r\n    {\r\n        strcpy(str,s);\r\n        str[1] = s[2];\r\n        str[2] = s[5];\r\n        str[5] = s[6];\r\n        str[6] = s[1];\r\n        str[8] = '\\0';\r\n        contor();\r\n    }\r\n    void contor()\r\n    {\r\n\r\n        hashVal = 0;\r\n        for(int i=0;i<8;i++)\r\n        {\r\n            int temp = 0;\r\n            for(int j=i+1;j<8;j++)\r\n            {\r\n                if(str[j]<str[i])\r\n                {\r\n                    temp++;\r\n                }\r\n            }\r\n            hashVal += temp*factor[7-i];\r\n        }\r\n    }\r\n};\r\nstruct Queue\r\n{\r\n    Queue()\r\n    {\r\n        head = 0;\r\n        tail = 0;\r\n        length = 0;\r\n    }\r\n    void push(TOY t)\r\n    {\r\n        _elem[tail++] = t;\r\n        length++;\r\n    }\r\n    TOY pop()\r\n    {\r\n        length--;\r\n        return _elem[head++];\r\n\r\n    }\r\n    TOY _elem[MAX*2];//模拟队列\r\n    int head;\r\n    int tail;\r\n    int length;\r\n\r\n}queue;\r\n\r\n\r\nvoid Init()//初始化，计算所有情况并将步数保存到输出数组中\r\n{\r\n    TOY firstToy(\"12345678\");//初始状态-康托展开hashVal为0\r\n    queue.push(firstToy);//入队\r\n    //BFS\r\n    while(queue.length>0)\r\n    {\r\n        TOY tempHead = queue.pop();//取出第一个节点\r\n        TOY temptail;\r\n        //题目问的是由目标返回初始的步数，因此采取逆操作\r\n        //下上交换\r\n        temptail.downUpChange(tempHead.str);\r\n        if(outMap[temptail.hashVal] == 0 && temptail.hashVal != 0)//未访问过&&不是初始状态\r\n        {\r\n            queue.push(temptail);\r\n            outMap[temptail.hashVal] = outMap[tempHead.hashVal]+1;//步数加1\r\n        }\r\n        //循环左移\r\n        temptail.cycleLeftMove(tempHead.str);\r\n        if(outMap[temptail.hashVal] == 0 && temptail.hashVal != 0)//未访问过&&不是初始状态\r\n        {\r\n            queue.push(temptail);\r\n            outMap[temptail.hashVal] = outMap[tempHead.hashVal]+1;//步数加1\r\n        }\r\n        //中心逆时针旋转\r\n        temptail.centerMove(tempHead.str);\r\n        if(outMap[temptail.hashVal] == 0 && temptail.hashVal != 0)//未访问过&&不是初始状态\r\n        {\r\n            queue.push(temptail);\r\n            outMap[temptail.hashVal] = outMap[tempHead.hashVal]+1;//步数加1\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\nint main()\r\n{\r\n    Init();\r\n    int n,num;\r\n    char s[9] ={'\\0'};\r\n    scanf(\"%d\",&n);\r\n    while(n--)\r\n    {\r\n        for(int i=0;i<8;i++)\r\n        {\r\n            scanf(\"%d\",&num);\r\n            s[i] = num + '0';\r\n        }\r\n        TOY tempToy(s);\r\n        if(tempToy.hashVal == 0)\r\n        {\r\n            printf(\"%d\\n\",0);\r\n        }\r\n        else\r\n        {\r\n            printf(\"%d\\n\",outMap[tempToy.hashVal]>0?outMap[tempToy.hashVal]:-1);\r\n        }\r\n    }\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "Train/Train.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    train.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "Train/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "Train/train.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#include <cstring>\r\n\r\n#define MAX 20000000\r\n//#define DEBUG\r\nusing namespace std;\r\nint outArray[MAX];\r\nchar resultBuffer[50000000];\r\nint resultLen = 0;\r\nclass MyStack\r\n{\r\npublic:\r\n    MyStack(int capacity)\r\n    {\r\n       this->capacity = capacity;\r\n       currentSize = 0;\r\n       st = new int[capacity];\r\n    }\r\n    bool push(int e)\r\n    {\r\n       if(currentSize<capacity)\r\n       {\r\n          strcpy(resultBuffer+resultLen,\"push\\n\");\r\n          resultLen += 5;\r\n          st[currentSize++] = e;\r\n          return true;\r\n       }\r\n       else\r\n       {\r\n           return false;\r\n       }\r\n    }\r\n    int top()\r\n    {\r\n        return st[currentSize-1];\r\n    }\r\n\r\n    int pop()\r\n    {\r\n        strcpy(resultBuffer+resultLen,\"pop\\n\");\r\n        resultLen += 4;\r\n        currentSize--;\r\n        return st[currentSize-1];\r\n    }\r\n    bool empty()\r\n    {\r\n        return (currentSize == 0);\r\n    }\r\n    bool full()\r\n    {\r\n        return (currentSize == capacity);\r\n    }\r\n\r\nprivate:\r\n    int *st;\r\n    int currentSize;\r\n    int capacity;\r\n};\r\nint main()\r\n{\r\n    int m,n,i,j,r;\r\n    scanf(\"%d%d\",&n,&m);\r\n    if(m == 0)\r\n    {\r\n        printf(\"No\\n\");\r\n        return 0;\r\n    }\r\n    for(i=0;i<n;i++)\r\n    {\r\n      scanf(\"%d\",&outArray[i]);\r\n    }\r\n    MyStack stack(m);\r\n    i=0,j=0,r=1;\r\n    while(i<n)\r\n    {\r\n        if(outArray[i] == r)\r\n        {\r\n            if(stack.full())\r\n            {\r\n                printf(\"No\\n\");\r\n                return 0;\r\n            }\r\n#ifdef DEBUG\r\n            cout<<\"push \"<<r<<endl<<\"pop \"<<r<<endl;\r\n#endif\r\n            strcpy(resultBuffer+resultLen,\"push\\npop\\n\");\r\n            resultLen += 9;\r\n            i++;\r\n            r++;\r\n            continue;\r\n        }\r\n        if(outArray[i]<r)\r\n        {\r\n            if(outArray[i] == stack.top())\r\n            {\r\n#ifdef DEBUG\r\n                cout<<\"pop \"<<outArray[i]<<endl;\r\n#endif\r\n                stack.pop();\r\n                i++;\r\n                continue;\r\n            }\r\n            else\r\n            {\r\n                printf(\"No\\n\");\r\n                return 0;\r\n            }\r\n        }\r\n        if(outArray[i] > r)\r\n        {\r\n            while(outArray[i] > r)\r\n            {\r\n                if(stack.full())\r\n                {\r\n                    printf(\"No\\n\");\r\n                    return 0;\r\n                }\r\n#ifdef DEBUG\r\n                cout<<\"push \"<<r<<endl;\r\n#endif\r\n                stack.push(r++);\r\n            }\r\n            if(stack.full())\r\n            {\r\n                printf(\"No\\n\");\r\n                return 0;\r\n            }\r\n#ifdef DEBUG\r\n                cout<<\"push \"<<r<<endl<<\"pop \"<<r<<endl;\r\n#endif\r\n\r\n            strcpy(resultBuffer+resultLen,\"push\\npop\\n\");\r\n            resultLen += 9;\r\n            r++;\r\n            i++;\r\n        }\r\n    }\r\n    printf(\"%s\",resultBuffer);\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "Tunel/Tunel.cpp",
    "content": "#include <iostream>\r\n#include <cstdio>\r\n#define MAX 20000000\r\nusing namespace std;\r\nchar resultBuff[10000000];\r\nchar buffer[1000000];//缓冲区，减少IO操作，缩短读入数据时间\r\nint resultLen = 0;\r\nclass Queue\r\n{\r\npublic:\r\n    Queue(int capacity)\r\n    {\r\n        this->capacity = capacity;\r\n        data = new int[capacity];\r\n        currentSize = 0;\r\n        front = 0;\r\n        rear = 0;\r\n    }\r\n    void enQueue(int e)\r\n    {\r\n        data[rear] = e;\r\n        rear = (rear +1) % capacity;\r\n        currentSize++;\r\n    }\r\n    int deQueue()\r\n    {\r\n        int val = data[front];\r\n        front = (front+1) % capacity;\r\n        currentSize--;\r\n        printf(\"%d\\n\",val);\r\n        return val;\r\n    }\r\n    bool empty()\r\n    {\r\n        return currentSize == 0;\r\n    }\r\n    bool full()\r\n    {\r\n        return currentSize == capacity;\r\n    }\r\nprivate:\r\n    int front;\r\n    int rear;\r\n    int currentSize;\r\n    int capacity;\r\n    int *data;\r\n};\r\nstruct dataNode\r\n{\r\n    int val;\r\n    int counter;\r\n};\r\nclass DQueue\r\n{\r\npublic:\r\n    DQueue(int capacity)\r\n    {\r\n        this->capacity = capacity;\r\n        data = new dataNode[capacity];\r\n        front = 0;\r\n        rear = 0;\r\n        currentSize = 0;\r\n    }\r\n    int removeFront()\r\n    {\r\n        int val = data[front].val;\r\n        front = (front+1)%capacity;\r\n        currentSize--;\r\n        return val;\r\n    }\r\n\r\n    dataNode removeRear()\r\n    {\r\n\r\n        if(rear == 0)\r\n        {\r\n            rear = capacity -1;\r\n        }\r\n        else\r\n        {\r\n            rear--;\r\n        }\r\n        dataNode temNode = data[rear];\r\n        currentSize--;\r\n        return temNode;\r\n    }\r\n    void insertRear(int e)\r\n    {\r\n        dataNode temNode;\r\n        temNode.val = e;\r\n        data[rear] = temNode;\r\n        rear = (rear + 1)%capacity;\r\n        currentSize++;\r\n    }\r\n    dataNode& getRear()\r\n    {\r\n        int pos;\r\n        if(rear == 0)\r\n        {\r\n            pos = capacity - 1;\r\n        }\r\n        else\r\n        {\r\n            pos = rear -1;\r\n        }\r\n        return data[pos];\r\n    }\r\n    dataNode& getFront()\r\n    {\r\n        return data[front];\r\n    }\r\n\r\n    bool empty()\r\n    {\r\n        return currentSize == 0;\r\n    }\r\n    bool full()\r\n    {\r\n        return currentSize == capacity;\r\n    }\r\n\r\nprivate:\r\n    int front;\r\n    int rear;\r\n    int currentSize;\r\n    int capacity;\r\n    dataNode *data;\r\n\r\n};\r\nint main()\r\n{\r\n    int n,x;\r\n    char buf[16];\r\n    Queue queue(MAX);\r\n    DQueue dqueue(MAX);\r\n    scanf(\"%d\",&n);\r\n    setvbuf(stdin,buffer,_IOFBF,1000000);\r\n    while (n-->0)\r\n    {\r\n        scanf(\"%s\",buf);\r\n        if(buf[0] == 'E')\r\n        {\r\n            scanf(\"%d\",&x);\r\n            if(!queue.full())\r\n            {\r\n                queue.enQueue(x);\r\n                int a = 1;\r\n                while(!dqueue.empty() && dqueue.getRear().val <= x)\r\n                {\r\n                    a += dqueue.removeRear().counter;\r\n                }\r\n                dqueue.insertRear(x);\r\n                dqueue.getRear().counter = a;\r\n            }\r\n\r\n        }\r\n        else\r\n        {\r\n            if(buf[0] == 'D')\r\n            {\r\n                if(!queue.empty())\r\n                {\r\n                    queue.deQueue();\r\n                    if(!(--dqueue.getFront().counter))\r\n                    {\r\n                        dqueue.removeFront();\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                int val = dqueue.getFront().val;\r\n                printf(\"%d\\n\",val);\r\n            }\r\n        }\r\n    }\r\n    return 0;\r\n}\r\n\r\n"
  },
  {
    "path": "Tunel/Tunel.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    Tunel.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "Tunel/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "Zuma2/Zuma2.cpp",
    "content": "#include <iostream>\r\n#include <cstring>\r\n#include <cstdio>\r\n#include <iostream>\r\n#define MAX 100000000\r\nusing namespace std;\r\n//链表节点\r\nstruct ZumaNode\r\n{\r\n    char data;\r\n    ZumaNode *pred;\r\n    ZumaNode *succ;\r\n    ZumaNode(){}\r\n    ZumaNode(char name):data(name){}\r\n}*header,*trailer;\r\nchar buffer[MAX];\r\nchar resultBuffer[150000000];//不足够大无法通过最后一个测试用例\r\nint listSize = 0;\r\n//将输入字符串转成列表\r\nvoid createList(char *str,int len)\r\n{\r\n    header = new ZumaNode();\r\n    header->pred = NULL;\r\n    ZumaNode *rear = header;\r\n  //  rear = header;\r\n    for(int i= 0;i<len;++i)\r\n    {\r\n        ZumaNode *temNode = new ZumaNode(str[i]);\r\n        rear->succ = temNode;\r\n        temNode->pred = rear;\r\n        rear = temNode;\r\n        listSize++;\r\n    }\r\n    trailer = new ZumaNode();\r\n    trailer->pred = rear;\r\n    rear->succ = trailer;\r\n    trailer->succ = NULL;\r\n}\r\n\r\nZumaNode *findNode(int position)\r\n{\r\n    int num = 0;\r\n    ZumaNode *p = header->succ;\r\n    while( num < position && p->succ != NULL)\r\n    {\r\n         p = p->succ;\r\n         num++;\r\n    }\r\n    return p;\r\n}\r\n\r\nZumaNode *delRepet(ZumaNode *currentNode,char data)\r\n{\r\n    ZumaNode *preNode;\r\n    while(1)\r\n    {\r\n       preNode = currentNode->pred;\r\n       int num = 0;\r\n       while(currentNode != trailer && currentNode->data == data)\r\n       {\r\n           currentNode = currentNode->succ;\r\n           num++;\r\n       }\r\n       while(preNode->succ != header && preNode->data == data)\r\n       {\r\n           preNode = preNode->pred;\r\n           num++;\r\n       }\r\n       if(num >= 3)\r\n       {\r\n           listSize -= num;\r\n           ZumaNode *p1,*p2;\r\n           p1 = preNode->succ;\r\n           while(p1 != currentNode)\r\n           {\r\n               p2 = p1->succ;\r\n               delete p1;\r\n               p1 = p2;\r\n           }\r\n           preNode->succ = currentNode;\r\n           currentNode->pred = preNode;\r\n           if(currentNode != trailer)\r\n                data = currentNode->data;//关键点，合并后再次删除\r\n       }\r\n       else\r\n       {\r\n           break;//退出循环\r\n       }\r\n    }\r\n    return preNode;\r\n}\r\n\r\nvoid insertNode(ZumaNode *currentNode,char c)\r\n{\r\n    ZumaNode *temNode = new ZumaNode(c);\r\n    if(currentNode->pred != NULL)\r\n    {\r\n        temNode->succ = currentNode;\r\n        temNode->pred = currentNode->pred;\r\n        currentNode->pred->succ = temNode;\r\n        currentNode->pred = temNode;\r\n    }\r\n    listSize++;\r\n}\r\n\r\nint main()\r\n{\r\n    int n,counter,resultLen = 0;\r\n    gets(buffer);\r\n    createList(buffer,strlen(buffer));\r\n    scanf(\"%d\",&n);\r\n    int *arrayposition  = new int[n];\r\n    char *arrayBall = new char[n];\r\n    for(int i=0;i<n;i++)\r\n    {\r\n       scanf(\"%d %c\",&arrayposition[i],&arrayBall[i]);\r\n    }\r\n    counter = 0;\r\n    while(n-->0)\r\n    {\r\n       ZumaNode *temNode = findNode(arrayposition[counter]);\r\n       insertNode(temNode,arrayBall[counter]);\r\n       delRepet(temNode,arrayBall[counter]);\r\n       ZumaNode* result = header;\r\n       if(listSize == 0)\r\n       {\r\n         //  printf(\"-\\n\");\r\n           resultBuffer[resultLen++] = '-';\r\n           resultBuffer[resultLen++] = '\\n';\r\n       }\r\n       else\r\n       {\r\n         for(int i=0;i<listSize;i++)\r\n         {\r\n           // printf(\"%c\",result->succ->data);\r\n            resultBuffer[resultLen++] = result->succ->data;\r\n            result = result->succ;\r\n         }\r\n         resultBuffer[resultLen++] = '\\n';\r\n       //  printf(\"\\n\");\r\n       }\r\n       counter++;\r\n    }\r\n    printf(\"%s\",resultBuffer);\r\n    return 0;\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "Zuma2/Zuma2.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\n\r\nSOURCES += \\\r\n    Zuma2.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  },
  {
    "path": "Zuma2/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "testDeom/deployment.pri",
    "content": "# This file was generated by an application wizard of Qt Creator.\r\n# The code below handles deployment to Android and Maemo, aswell as copying\r\n# of the application data to shadow build directories on desktop.\r\n# It is recommended not to modify this file, since newer versions of Qt Creator\r\n# may offer an updated version of it.\r\n\r\ndefineTest(qtcAddDeployment) {\r\nfor(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n    item = item$${deploymentfolder}\r\n    greaterThan(QT_MAJOR_VERSION, 4) {\r\n        itemsources = $${item}.files\r\n    } else {\r\n        itemsources = $${item}.sources\r\n    }\r\n    $$itemsources = $$eval($${deploymentfolder}.source)\r\n    itempath = $${item}.path\r\n    $$itempath= $$eval($${deploymentfolder}.target)\r\n    export($$itemsources)\r\n    export($$itempath)\r\n    DEPLOYMENT += $$item\r\n}\r\n\r\nMAINPROFILEPWD = $$PWD\r\n\r\nandroid-no-sdk {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    target.path = /data/user/qt\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:android {\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = /assets/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    x86 {\r\n        target.path = /libs/x86\r\n    } else: armeabi-v7a {\r\n        target.path = /libs/armeabi-v7a\r\n    } else {\r\n        target.path = /libs/armeabi\r\n    }\r\n\r\n    export(target.path)\r\n    INSTALLS += target\r\n} else:win32 {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, /, \\\\)\r\n        sourcePathSegments = $$split(source, \\\\)\r\n        target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)\r\n        target = $$replace(target, /, \\\\)\r\n        target ~= s,\\\\\\\\\\\\.?\\\\\\\\,\\\\,\r\n        !isEqual(source,$$target) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            isEqual(QMAKE_DIR_SEP, \\\\) {\r\n                copyCommand += $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            } else {\r\n                source = $$replace(source, \\\\\\\\, /)\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n                target = $$replace(target, \\\\\\\\, /)\r\n                copyCommand += test -d \\\"$$target\\\" || mkdir -p \\\"$$target\\\" && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = @echo Copying application data... && $$copyCommand\r\n        copydeploymentfolders.commands = $$copyCommand\r\n        first.depends = $(first) copydeploymentfolders\r\n        export(first.depends)\r\n        export(copydeploymentfolders.commands)\r\n        QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n    }\r\n} else:ios {\r\n    copyCommand =\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n        source = $$replace(source, \\\\\\\\, /)\r\n        target = $CODESIGNING_FOLDER_PATH/$$eval($${deploymentfolder}.target)\r\n        target = $$replace(target, \\\\\\\\, /)\r\n        sourcePathSegments = $$split(source, /)\r\n        targetFullPath = $$target/$$last(sourcePathSegments)\r\n        targetFullPath ~= s,/\\\\.?/,/,\r\n        !isEqual(source,$$targetFullPath) {\r\n            !isEmpty(copyCommand):copyCommand += &&\r\n            copyCommand += mkdir -p \\\"$$target\\\"\r\n            copyCommand += && cp -r \\\"$$source\\\" \\\"$$target\\\"\r\n        }\r\n    }\r\n    !isEmpty(copyCommand) {\r\n        copyCommand = echo Copying application data... && $$copyCommand\r\n        !isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += \";\"\r\n        QMAKE_POST_LINK += \"$$copyCommand\"\r\n        export(QMAKE_POST_LINK)\r\n    }\r\n} else:unix {\r\n    maemo5 {\r\n        desktopfile.files = $${TARGET}.desktop\r\n        desktopfile.path = /usr/share/applications/hildon\r\n        icon.files = $${TARGET}64.png\r\n        icon.path = /usr/share/icons/hicolor/64x64/apps\r\n    } else:!isEmpty(MEEGO_VERSION_MAJOR) {\r\n        desktopfile.files = $${TARGET}_harmattan.desktop\r\n        desktopfile.path = /usr/share/applications\r\n        icon.files = $${TARGET}80.png\r\n        icon.path = /usr/share/icons/hicolor/80x80/apps\r\n    } else { # Assumed to be a Desktop Unix\r\n        copyCommand =\r\n        for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n            source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)\r\n            source = $$replace(source, \\\\\\\\, /)\r\n            macx {\r\n                target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)\r\n            } else {\r\n                target = $$OUT_PWD/$$eval($${deploymentfolder}.target)\r\n            }\r\n            target = $$replace(target, \\\\\\\\, /)\r\n            sourcePathSegments = $$split(source, /)\r\n            targetFullPath = $$target/$$last(sourcePathSegments)\r\n            targetFullPath ~= s,/\\\\.?/,/,\r\n            !isEqual(source,$$targetFullPath) {\r\n                !isEmpty(copyCommand):copyCommand += &&\r\n                copyCommand += $(MKDIR) \\\"$$target\\\"\r\n                copyCommand += && $(COPY_DIR) \\\"$$source\\\" \\\"$$target\\\"\r\n            }\r\n        }\r\n        !isEmpty(copyCommand) {\r\n            copyCommand = @echo Copying application data... && $$copyCommand\r\n            copydeploymentfolders.commands = $$copyCommand\r\n            first.depends = $(first) copydeploymentfolders\r\n            export(first.depends)\r\n            export(copydeploymentfolders.commands)\r\n            QMAKE_EXTRA_TARGETS += first copydeploymentfolders\r\n        }\r\n    }\r\n    !isEmpty(target.path) {\r\n        installPrefix = $${target.path}\r\n    } else {\r\n        installPrefix = /opt/$${TARGET}\r\n    }\r\n    for(deploymentfolder, DEPLOYMENTFOLDERS) {\r\n        item = item$${deploymentfolder}\r\n        itemfiles = $${item}.files\r\n        $$itemfiles = $$eval($${deploymentfolder}.source)\r\n        itempath = $${item}.path\r\n        $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)\r\n        export($$itemfiles)\r\n        export($$itempath)\r\n        INSTALLS += $$item\r\n    }\r\n\r\n    !isEmpty(desktopfile.path) {\r\n        export(icon.files)\r\n        export(icon.path)\r\n        export(desktopfile.files)\r\n        export(desktopfile.path)\r\n        INSTALLS += icon desktopfile\r\n    }\r\n\r\n    isEmpty(target.path) {\r\n        target.path = $${installPrefix}/bin\r\n        export(target.path)\r\n    }\r\n    INSTALLS += target\r\n}\r\n\r\nexport (ICON)\r\nexport (INSTALLS)\r\nexport (DEPLOYMENT)\r\nexport (LIBS)\r\nexport (QMAKE_EXTRA_TARGETS)\r\n}\r\n\r\n"
  },
  {
    "path": "testDeom/main.cpp",
    "content": "#include<iostream>\r\n#include<math.h>\r\nusing namespace std;\r\n\r\nint main()\r\n{\r\n    int count,h;\r\n    cin>>h;\r\n    count = 1;\r\n\r\n    while(1)\r\n    {\r\n        if((count + count *count) < h)\r\n        {\r\n            count++;\r\n        }\r\n        else\r\n        {\r\n            cout << count - 1;\r\n            return 0;\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "testDeom/testDeom.pro",
    "content": "TEMPLATE = app\r\nCONFIG += console\r\nCONFIG -= app_bundle\r\nCONFIG -= qt\r\nCONFIG += C++11\r\nSOURCES += main.cpp\r\n\r\ninclude(deployment.pri)\r\nqtcAddDeployment()\r\n\r\n"
  }
]