{"id":545,"date":"2020-10-17T18:21:19","date_gmt":"2020-10-17T10:21:19","guid":{"rendered":"http:\/\/bytew.net\/?p=545"},"modified":"2021-10-02T02:57:37","modified_gmt":"2021-10-01T18:57:37","slug":"ccsp%e6%af%94%e8%b5%9b%e8%ae%b0%e5%bd%95299-896555%e5%88%86","status":"publish","type":"post","link":"https:\/\/bytew.net\/?p=545","title":{"rendered":"CCSP\u6bd4\u8d5b\u8bb0\u5f55(299.896555\u5206)"},"content":{"rendered":"\n<p>\u53ef\u80fd\u8d62\u4e86<\/p>\n\n\n\n<p>\u53ef\u80fd\u6ca1\u8d62<\/p>\n\n\n\n<p>UPD:\u8d62\u4e86\uff0c\u723d\u554a\u3002\u3002\u8c01\u77e5\u9053\u7b2c\u4e8c\u540d\u591a\u5c11\u5206\uff1f<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"678\" src=\"https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-1024x678.png\" alt=\"\" class=\"wp-image-546\" srcset=\"https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-1024x678.png 1024w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-300x199.png 300w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-768x508.png 768w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-1536x1016.png 1536w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.06-2048x1355.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p>\u6bd4\u8d5b\u4f53\u9a8c\u4e00\u822c\u3002\u6ca1\u4eba\u56de\u7b54\u95ee\u9898\uff0c\u8bc4\u6d4bqueue\u957f\u8fbe15\u5206\u949f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"670\" src=\"https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-1024x670.png\" alt=\"\" class=\"wp-image-547\" srcset=\"https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-1024x670.png 1024w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-300x196.png 300w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-768x502.png 768w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-1536x1005.png 1536w, https:\/\/bytew.net\/wp-content\/uploads\/2020\/10\/\u622a\u5c4f2020-10-17-\u4e0b\u53485.20.50-2048x1339.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;bits\/stdc++.h>\nusing namespace std;\n\ntemplate &lt;typename A, typename B>string to_string(pair&lt;A, B> p);template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p);template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p);string to_string(const string&amp; s) {  return '\"' + s + '\"';}string to_string(const char* s) {  return to_string((string) s);}string to_string(bool b) {  return (b ? \"true\" : \"false\");}string to_string(vector&lt;bool> v) {  bool first = true;  string res = \"{\";  for (int i = 0; i &lt; static_cast&lt;int>(v.size()); i++) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(v&#91;i]);  }  res += \"}\";  return res;}template &lt;size_t N>string to_string(bitset&lt;N> v) {  string res = \"\";  for (size_t i = 0; i &lt; N; i++) {    res += static_cast&lt;char>('0' + v&#91;i]);  }  return res;}template &lt;typename A>string to_string(A v) {  bool first = true;  string res = \"{\";  for (const auto &amp;x : v) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(x);  }  res += \"}\";  return res;}template &lt;typename A, typename B>string to_string(pair&lt;A, B> p) {  return \"(\" + to_string(p.first) + \", \" + to_string(p.second) + \")\";}template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \")\";}template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \", \" + to_string(get&lt;3>(p)) + \")\";}void debug_out() { cerr &lt;&lt; endl; }template &lt;typename Head, typename... Tail>void debug_out(Head H, Tail... T) {  cerr &lt;&lt; \" \" &lt;&lt; to_string(H);  debug_out(T...);}\n\n#ifdef LOCAL\n#define debug(...) cerr &lt;&lt; \"&#91;\" &lt;&lt; #__VA_ARGS__ &lt;&lt; \"]:\", debug_out(__VA_ARGS__)\n#else\n#define debug(...) 42\n#endif\n\n#define set0(x) memset(x,0,sizeof(x))\n#define F first\n#define S second\n#define PB push_back\n#define MP make_pair\n#define rep(i, a, b) for(int i = a; i &lt; (b); ++i)\n#define trav(a, x) for(auto&amp; a : x)\n#define all(x) x.begin(), x.end()\n#define sz(x) (int)(x).size()\n\ntypedef long long ll;\ntypedef pair&lt;int,int> pii;\ntypedef pair&lt;ll,ll> pll;\ntypedef pair&lt;double,int> pdi;\ntemplate&lt;typename T> void read(T &amp;x){\n    x = 0;char ch = getchar();ll f = 1;\n    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}\n    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;\n}\ntemplate&lt;typename T, typename... Args> void read(T &amp;first, Args&amp; ... args) {\n    read(first);\n    read(args...);\n}\n\nint n,l,m,cap,vc&#91;2020];\nstruct edge{\n    int to,tc;\n    double cost;\n};\nvector&lt;edge> edges&#91;2020];\n\ndouble md&#91;10000010];\nint fr&#91;10000010];\n\nint main() {\n    read(n,l,m,cap);\n    cout&lt;&lt;setprecision(6)&lt;&lt;fixed;\n    for(int i=1;i&lt;=l;i++){\n        read(vc&#91;i]);\n    }\n    for(int i=1;i&lt;=m;i++){\n        int fr,to,co;\n        double prob;\n        scanf(\"%d%d%lf%d\",&amp;fr,&amp;to,&amp;prob,&amp;co);\n        if(prob!=1) edges&#91;fr].PB({to,co,-log(1-prob)});\n        else edges&#91;fr].PB({to,co,1e8});\n    }\n    for(int i=0;i&lt;10000010;i++)md&#91;i] = 1e18;\n    priority_queue&lt;pdi,vector&lt;pdi>,greater&lt;pdi>> Pq;\n    Pq.push(MP(0.0,0));\n    md&#91;0] = 0;\n    while(!Pq.empty()){\n        pdi C = Pq.top();Pq.pop();\n        if(C.F>md&#91;C.S])continue;\n        int a = (C.S>5000000),b = C.S-(a?5000000:0),c = b%2001,d = b\/2001;\n        if(a &amp;&amp; d == 0){\n            vector&lt;int> V;\n            int ct = C.S;\n            int id = 0;\n            while(ct!=0){\n                int C = (ct%5000000)\/2001;\n                if(V.size() &amp;&amp; V.back() == C){\n                    id = C;\n                }else{\n                    V.PB(C);\n                }\n                ct = fr&#91;ct];\n            }\n            V.PB(ct);\n            reverse(all(V));\n            cout&lt;&lt;id&lt;&lt;endl;\n            cout&lt;&lt;c&lt;&lt;endl;\n            cout&lt;&lt;1.0-exp(-C.F)&lt;&lt;endl;\n            for(int i=0;i&lt;V.size();i++){\n                cout&lt;&lt;V&#91;i]&lt;&lt;\" \\n\"&#91;i == V.size()-1];    \n            }\n            return 0;\n        }\n        if(!a &amp;&amp; d&lt;=l &amp;&amp; d>=1 &amp;&amp; c+vc&#91;d]&lt;=cap){\n            int tgt = C.S+5000000+vc&#91;d];\n            if(md&#91;tgt]>C.F){\n                md&#91;tgt] = C.F;\n                fr&#91;tgt] = C.S;\n                Pq.push(MP(C.F,tgt));\n            }\n        }\n        for(auto ct:edges&#91;d]){\n            if(c+ct.tc>cap)continue;\n            int tgt = ct.to*2001+c+ct.tc+(a?5000000:0);\n            if(md&#91;tgt]>C.F+ct.cost){\n                md&#91;tgt] = C.F+ct.cost;\n                fr&#91;tgt] = C.S;\n                Pq.push(MP(C.F+ct.cost,tgt));\n            }\n        }\n    }\n    return 0;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;bits\/stdc++.h>\n#include &lt;stdio.h>\nusing namespace std;\n\ntemplate &lt;typename A, typename B>string to_string(pair&lt;A, B> p);template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p);template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p);string to_string(const string&amp; s) {  return '\"' + s + '\"';}string to_string(const char* s) {  return to_string((string) s);}string to_string(bool b) {  return (b ? \"true\" : \"false\");}string to_string(vector&lt;bool> v) {  bool first = true;  string res = \"{\";  for (int i = 0; i &lt; static_cast&lt;int>(v.size()); i++) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(v&#91;i]);  }  res += \"}\";  return res;}template &lt;size_t N>string to_string(bitset&lt;N> v) {  string res = \"\";  for (size_t i = 0; i &lt; N; i++) {    res += static_cast&lt;char>('0' + v&#91;i]);  }  return res;}template &lt;typename A>string to_string(A v) {  bool first = true;  string res = \"{\";  for (const auto &amp;x : v) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(x);  }  res += \"}\";  return res;}template &lt;typename A, typename B>string to_string(pair&lt;A, B> p) {  return \"(\" + to_string(p.first) + \", \" + to_string(p.second) + \")\";}template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \")\";}template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \", \" + to_string(get&lt;3>(p)) + \")\";}void debug_out() { cerr &lt;&lt; endl; }template &lt;typename Head, typename... Tail>void debug_out(Head H, Tail... T) {  cerr &lt;&lt; \" \" &lt;&lt; to_string(H);  debug_out(T...);}\n\n#ifdef LOCAL\n#define debug(...) cerr &lt;&lt; \"&#91;\" &lt;&lt; #__VA_ARGS__ &lt;&lt; \"]:\", debug_out(__VA_ARGS__)\n#else\n#define debug(...) 42\n#endif\n\n#define set0(x) memset(x,0,sizeof(x))\n#define F first\n#define S second\n#define PB push_back\n#define MP make_pair\n#define rep(i, a, b) for(int i = a; i &lt; (b); ++i)\n#define trav(a, x) for(auto&amp; a : x)\n#define all(x) x.begin(), x.end()\n#define sz(x) (int)(x).size()\n\ntypedef long long ll;\ntypedef pair&lt;int,int> pii;\ntypedef pair&lt;ll,ll> pll;\ntemplate&lt;typename T> void read(T &amp;x){\n    x = 0;char ch = getchar();ll f = 1;\n    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}\n    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;\n}\ntemplate&lt;typename T, typename... Args> void read(T &amp;first, Args&amp; ... args) {\n    read(first);\n    read(args...);\n}\n\nstring Fsys&#91;18000000];\n\nint Fcnt = 0;\nint filemp&#91;5050]&#91;5050];\nbool fileown&#91;5050]&#91;5050];\nbool cmp&#91;5050]&#91;5050];\n\nmap&lt;string,int> Files,Commits;\nstring Fname&#91;5050];\n\nchar op&#91;150],name&#91;150],name1&#91;150],name2&#91;150],File&#91;400];\n\nint N,offset,len;\nint wcmt = 0,wcac = 1,cac_emp = 1;\n\nvoid Mgtline(char *Tgt){\n    while(1){\n        char ch= getchar();\n        if(ch == '\\n'){\n            *Tgt = 0;\n            return;\n        }else{\n            *Tgt = ch;\n            Tgt++;\n        }\n    }\n}\n\nvoid make_cac(){\n    if(!cac_emp)return;\n    cac_emp = 0;\n    int T = Files.size();\n    for(int i=1;i&lt;=T;i++){\n        filemp&#91;wcac]&#91;i] = filemp&#91;wcmt]&#91;i];\n    }\n}\n\nint main() {\n    read(N);\n    for(int opn = 1;opn&lt;=N;opn++){\n        scanf(\"%s\",op);\n        if(op&#91;0] == 'w'){\n            make_cac();\n            scanf(\"%s\",name);\n            read(offset,len);\n            string Sname(name);\n            if(!Files.count(Sname)){\n                int cnid = Files.size()+1;\n                Files&#91;Sname] = cnid;\n                Fname&#91;cnid] = Sname;\n                for(int j=1;j&lt;cnid;j++){\n                    cmp&#91;j]&#91;cnid] = Fname&#91;j]>Fname&#91;cnid];\n                    cmp&#91;cnid]&#91;j] = !cmp&#91;j]&#91;cnid];\n                }\n            }\n            int FNid = Files&#91;Sname];\n            int Fid = filemp&#91;wcac]&#91;FNid];\n            \n            if(Fid&lt;=0){\n                Fid = ++Fcnt;\n                filemp&#91;wcac]&#91;FNid] = Fid;\n                fileown&#91;wcac]&#91;FNid] = 1;\n            }\n            if(!fileown&#91;wcac]&#91;FNid]){\n                Fid = ++Fcnt;\n                Fsys&#91;Fid] = Fsys&#91;filemp&#91;wcac]&#91;FNid]];\n                filemp&#91;wcac]&#91;FNid] = Fid;\n                fileown&#91;wcac]&#91;FNid] = 1;\n            }\n            if(Fsys&#91;Fid].length()&lt;offset+len)Fsys&#91;Fid].resize(offset+len,'.');\n            Mgtline(File);\n            for(int i=0;i&lt;len;i++)Fsys&#91;Fid]&#91;offset+i] = File&#91;i];\n        }\n        if(op&#91;0] == 'r'){\n            scanf(\"%s\",name);\n            read(offset,len);\n            string Sname(name);\n            if(!Files.count(Sname)){\n                for(int i=0;i&lt;len;i++)putchar('.');\n                putchar('\\n');\n                continue;\n            }\n            int FNid = Files&#91;Sname];\n            int Fid = filemp&#91;wcac]&#91;FNid]?filemp&#91;wcac]&#91;FNid]:filemp&#91;wcmt]&#91;FNid];\n            if(Fid&lt;=0){\n                for(int i=0;i&lt;len;i++)putchar('.');\n                putchar('\\n');\n                continue;\n            }\n            for(int i=0;i&lt;len;i++)putchar((offset+i)&lt;Fsys&#91;Fid].size()?Fsys&#91;Fid]&#91;offset+i]:'.');\n            putchar('\\n');\n        }\n        if(op&#91;0] == 'u'){\n            scanf(\"%s\",name);\n            string Sname(name);\n            if(!Files.count(Sname)){\n                continue;\n            }\n            int FNid = Files&#91;Sname];\n            int Fid = filemp&#91;wcac]&#91;FNid]?filemp&#91;wcac]&#91;FNid]:filemp&#91;wcmt]&#91;FNid];\n            if(Fid&lt;=0) continue;\n            make_cac();\n            ++Fcnt;\n            filemp&#91;wcac]&#91;FNid] = -Fcnt;\n        }\n        if(op&#91;0] == 'l'){\n            int t = Files.size();\n            int cnt = 0,mi,mx;\n            for(int i=1;i&lt;=t;i++){\n                int Fid = filemp&#91;wcac]&#91;i]?filemp&#91;wcac]&#91;i]:filemp&#91;wcmt]&#91;i];\n                if(Fid&lt;=0) continue;\n                cnt+=1;\n                if(cnt == 1){\n                    mi = mx = i;\n                }else{\n                    if(cmp&#91;mi]&#91;i])mi = i;\n                    if(cmp&#91;i]&#91;mx])mx = i;\n                }\n            }\n            if(cnt == 0)cout&lt;&lt;\"0\\n\";\n            else{\n                cout&lt;&lt;cnt&lt;&lt;' '&lt;&lt;Fname&#91;mi]&lt;&lt;' '&lt;&lt;Fname&#91;mx]&lt;&lt;\"\\n\";\n            }\n        }\n        if(op&#91;0] == 'c' &amp;&amp; op&#91;1] == 'o'){\n            scanf(\"%s\",name);\n            string Sname(name);\n            if(Commits.count(Sname) || cac_emp){\n                debug(\"Commit Skipped\");\n                continue;\n            }\n            Commits&#91;Sname] = wcac;\n            wcmt = wcac;\n            wcac = Commits.size()+1;\n            cac_emp = 1;\n        }\n        if(op&#91;0] == 'c' &amp;&amp; op&#91;1] == 'h'){\n            scanf(\"%s\",name);\n            string Sname(name);\n            if(!Commits.count(Sname) || !cac_emp){\n                debug(\"Checkout Skipped\");\n                continue;\n            }\n            wcmt = Commits&#91;Sname];\n        }\n        if(op&#91;0] == 'm'){\n            scanf(\"%s%s\",name1,name2);\n            string S1(name1),S2(name2);\n            if(Commits.count(S2) || !Commits.count(S1) || Commits&#91;S1] == wcmt || !cac_emp){\n                debug(\"Merge Skipped\");\n                continue;\n            }\n            int wcmt2 = Commits&#91;S1];\n            int T = Files.size();\n            for(int i=1;i&lt;=T;i++){\n                if(abs(filemp&#91;wcmt]&#91;i])>abs(filemp&#91;wcmt2]&#91;i])) filemp&#91;wcac]&#91;i] = filemp&#91;wcmt]&#91;i];\n                else filemp&#91;wcac]&#91;i] = filemp&#91;wcmt2]&#91;i];\n            }\n            Commits&#91;S2] = wcac;\n            wcmt = wcac;\n            wcac = Commits.size()+1;\n            cac_emp = 1;\n        }\n    }\n    return 0;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"gc.h\"\n\n#include &lt;bits\/stdc++.h>\nusing namespace std;\n\ntemplate &lt;typename A, typename B>string to_string(pair&lt;A, B> p);template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p);template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p);string to_string(const string&amp; s) {  return '\"' + s + '\"';}string to_string(const char* s) {  return to_string((string) s);}string to_string(bool b) {  return (b ? \"true\" : \"false\");}string to_string(vector&lt;bool> v) {  bool first = true;  string res = \"{\";  for (int i = 0; i &lt; static_cast&lt;int>(v.size()); i++) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(v&#91;i]);  }  res += \"}\";  return res;}template &lt;size_t N>string to_string(bitset&lt;N> v) {  string res = \"\";  for (size_t i = 0; i &lt; N; i++) {    res += static_cast&lt;char>('0' + v&#91;i]);  }  return res;}template &lt;typename A>string to_string(A v) {  bool first = true;  string res = \"{\";  for (const auto &amp;x : v) {    if (!first) {      res += \", \";    }    first = false;    res += to_string(x);  }  res += \"}\";  return res;}template &lt;typename A, typename B>string to_string(pair&lt;A, B> p) {  return \"(\" + to_string(p.first) + \", \" + to_string(p.second) + \")\";}template &lt;typename A, typename B, typename C>string to_string(tuple&lt;A, B, C> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \")\";}template &lt;typename A, typename B, typename C, typename D>string to_string(tuple&lt;A, B, C, D> p) {  return \"(\" + to_string(get&lt;0>(p)) + \", \" + to_string(get&lt;1>(p)) + \", \" + to_string(get&lt;2>(p)) + \", \" + to_string(get&lt;3>(p)) + \")\";}void debug_out() { cerr &lt;&lt; endl; }template &lt;typename Head, typename... Tail>void debug_out(Head H, Tail... T) {  cerr &lt;&lt; \" \" &lt;&lt; to_string(H);  debug_out(T...);}\n\n#ifdef LOCAL\n#define debug(...) cerr &lt;&lt; \"&#91;\" &lt;&lt; #__VA_ARGS__ &lt;&lt; \"]:\", debug_out(__VA_ARGS__)\n#else\n#define debug(...) 42\n#endif\n\n#define set0(x) memset(x,0,sizeof(x))\n#define F first\n#define S second\n#define PB push_back\n#define MP make_pair\n#define rep(i, a, b) for(int i = a; i &lt; (b); ++i)\n#define trav(a, x) for(auto&amp; a : x)\n#define all(x) x.begin(), x.end()\n#define sz(x) (int)(x).size()\n\ntypedef long long ll;\ntypedef pair&lt;int,int> pii;\ntypedef pair&lt;ll,ll> pll;\ntemplate&lt;typename T> void read(T &amp;x){\n    x = 0;char ch = getchar();ll f = 1;\n    while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}\n    while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;\n}\ntemplate&lt;typename T, typename... Args> void read(T &amp;first, Args&amp; ... args) {\n    read(first);\n    read(args...);\n}\n\nusing namespace std;\n\nbool vis&#91;1024] = {0};\n\nvoid gc(unsigned char *mem) {\n    unsigned char *opt = mem;\n    static unsigned char nmem&#91;1024*1024*64];\n    int Rn = *((int*)mem);\n    queue&lt;int> Q2;\n    debug(Rn);\n    for(int i=0;i&lt;Rn;i++){\n        int pt = ((int*)mem)&#91;i+1];\n        debug(pt);\n        Q2.push(pt);\n    }\n    mem+=4*(Rn+1);\n    int Tn = *((int*)mem);\n    debug(Tn);\n    mem+=4;\n    vector&lt;int> Tmap&#91;1024]&#91;4];\n    bool vis&#91;1024] = {0};\n    int rewire&#91;1024] = {0};\n    for(int i=0;i&lt;Tn;i++){\n        int tnt = *((int*)mem);\n        debug(tnt);\n        mem+=4;\n        int cp = 0;\n        for(int j=0;j&lt;tnt;j++){\n            debug((int)mem&#91;j],cp);\n            if(mem&#91;j] == 0){\n                Tmap&#91;i]&#91;mem&#91;j]].PB(cp);\n                cp+=1;\n            }\n            if(mem&#91;j] == 1){\n                if(cp&amp;1)cp+=1;\n                Tmap&#91;i]&#91;mem&#91;j]].PB(cp);\n                cp+=2;\n            }\n            if(mem&#91;j] >= 2){\n                if(cp&amp;3)cp+=4-(cp&amp;3);\n                Tmap&#91;i]&#91;mem&#91;j]].PB(cp);\n                cp+=4;\n            }\n        }\n        mem+=tnt;\n    }\n    int Hl = *((int*)mem);\n    debug(Hl);\n    mem+=4;\n    unsigned char *old_heap = mem;\n    int sz = 0;\n    vector&lt;int> wupd_pointers,wupd_clsname;\n    queue&lt;int> Q;\n    while(!Q2.empty()){\n        int C = Q2.front();Q2.pop();\n        *((int*)(mem+C)) = *((int*)(mem+C))+2048;\n        Q.push(C);\n    }\n    while(!Q.empty()){\n        debug(Q.size());\n        int C = Q.front();Q.pop();\n        debug(1);\n        int typ = *((int*)(mem+C));\n        assert(typ&lt;134217728);\n        typ = typ&amp;2047;\n        vis&#91;typ] = 1;\n        wupd_clsname.PB(sz);\n        *((int*)(nmem+sz)) = typ;\n        *((int*)(mem+C)) = sz+134217728;\n        unsigned char* cstr = mem+C+4;\n        sz+=4;\n        for(auto ct:Tmap&#91;typ]&#91;0]){\n            nmem&#91;sz] = cstr&#91;ct];\n            sz+=1;\n        }\n        debug(2);\n        if(sz&amp;1)sz+=1;\n        for(auto ct:Tmap&#91;typ]&#91;1]){\n            nmem&#91;sz] = cstr&#91;ct];\n            nmem&#91;sz+1] = cstr&#91;ct+1];\n            sz+=2;\n        }\n        if(sz&amp;3)sz+=1;\n        if(sz&amp;3)sz+=1;\n        for(auto ct:Tmap&#91;typ]&#91;2]){\n            *((int*)(nmem+sz)) = *((int*)(cstr+ct));\n            sz+=4;\n        }\n        debug(3);\n        for(auto ct:Tmap&#91;typ]&#91;3]){\n        debug(ct);\n            debug(*((int*)(cstr+ct)));\n            int cv = *((int*)(cstr+ct)),cv2 = *((int*)(mem+cv));\n            debug(cv);\n            debug(cv2);\n            debug(sz);\n            if(cv == 1){\n                *((int*)(nmem+sz)) = 1;\n                sz+=4;\n                continue;\n            }\n            if(cv2&amp;134217728) *((int*)(nmem+sz)) = cv2-134217728;\n            else{\n                wupd_pointers.PB(sz);\n                if(!(cv2&amp;2048)){\n                    *((int*)(mem+cv)) = cv2+2048;\n                    Q.push(cv);\n                }\n                *((int*)(nmem+sz)) = cv;\n            }\n            sz+=4;\n            debug(cv,\"end\");\n        }\n        debug(1235);\n    }\n    debug(234);\n    for(auto ct:wupd_pointers){\n        int cv = *((int*)(nmem+ct));\n        int cv2 = *((int*)(mem+cv));\n        if(cv2&amp;134217728) *((int*)(nmem+ct)) = cv2-134217728;\n    }\n    debug(235);\n    mem = opt;\n    int Rn2 = *((int*)mem);\n    for(int i=0;i&lt;Rn2;i++){\n      ((int*)mem)&#91;i+1] = (*((int*)(old_heap+((int*)mem)&#91;i+1])))-134217728;\n    }\n    \n    debug(236);\n    mem+=4*(Rn+1);\n    int Tn2 = 0;\n    for(int i=0;i&lt;1024;i++){\n        if(vis&#91;i])rewire&#91;i] = Tn2;\n        Tn2+=vis&#91;i];\n    }\n    *((int*)mem) = Tn2;\n    mem+=4;\n    debug(237);\n    for(int i=0;i&lt;Tn;i++){\n        if(!vis&#91;i])continue;\n        int tnt = Tmap&#91;i]&#91;0].size()+Tmap&#91;i]&#91;1].size()+Tmap&#91;i]&#91;2].size()+Tmap&#91;i]&#91;3].size();\n        *((int*)mem) = tnt;\n        mem+=4;\n        for(int j=0;j&lt;Tmap&#91;i]&#91;0].size();j++)mem&#91;j] = 0;\n        mem+=Tmap&#91;i]&#91;0].size();\n        for(int j=0;j&lt;Tmap&#91;i]&#91;1].size();j++)mem&#91;j] = 1;\n        mem+=Tmap&#91;i]&#91;1].size();\n        for(int j=0;j&lt;Tmap&#91;i]&#91;2].size();j++)mem&#91;j] = 2;\n        mem+=Tmap&#91;i]&#91;2].size();\n        for(int j=0;j&lt;Tmap&#91;i]&#91;3].size();j++)mem&#91;j] = 3;\n        mem+=Tmap&#91;i]&#91;3].size();\n    }\n    debug(238);\n    for(auto ct:wupd_clsname){\n        *((int*)(nmem+ct)) = rewire&#91;*((int*)(nmem+ct))];\n    }\n    *((int*)mem) = sz;\n    memcpy(mem+4,nmem,sz);\n}<\/code><\/pre>\n ","protected":false},"excerpt":{"rendered":"<p>\u53ef\u80fd\u8d62\u4e86 \u53ef\u80fd\u6ca1\u8d62 UPD:\u8d62\u4e86\uff0c\u723d\u554a\u3002\u3002\u8c01\u77e5\u9053\u7b2c\u4e8c\u540d\u591a\u5c11\u5206\uff1f<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/posts\/545"}],"collection":[{"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bytew.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=545"}],"version-history":[{"count":2,"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/posts\/545\/revisions"}],"predecessor-version":[{"id":549,"href":"https:\/\/bytew.net\/index.php?rest_route=\/wp\/v2\/posts\/545\/revisions\/549"}],"wp:attachment":[{"href":"https:\/\/bytew.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bytew.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bytew.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}