{"id":20,"date":"2019-04-20T20:29:57","date_gmt":"2019-04-20T12:29:57","guid":{"rendered":"https:\/\/blog.kaaass.net\/acm\/?p=20"},"modified":"2019-04-20T20:29:57","modified_gmt":"2019-04-20T12:29:57","slug":"%e5%8d%97%e6%98%8cicpc%e9%82%80%e8%af%b7%e8%b5%9bc-angry-fff-party-%e9%ab%98%e7%b2%be%e6%9a%b4%e5%8a%9b","status":"publish","type":"post","link":"https:\/\/blog.kaaass.net\/acm\/2019\/04\/%e5%8d%97%e6%98%8cicpc%e9%82%80%e8%af%b7%e8%b5%9bc-angry-fff-party-%e9%ab%98%e7%b2%be%e6%9a%b4%e5%8a%9b\/","title":{"rendered":"\u5357\u660cICPC\u9080\u8bf7\u8d5bC.Angry FFF Party &#8211; \u9ad8\u7cbe\u66b4\u529b"},"content":{"rendered":"<p>\u672c\u6765\u4ee5\u4e3a\u8fd8\u662f\u7b7e\u5b8c\u5230\u5c31\u5f00\u59cb\u81ea\u95ed\uff0c\u6ca1\u60f3\u5230\u4eca\u5929\u7684\u9080\u8bf7\u8d5b\u8fd8\u6478\u51fa\u4e00\u9053C\u3002\u8fd9\u9898\u770b\u63d0\u4ea4\u6570\u5176\u5b9e\u4e0d\u591a\uff0c\u800c\u4e14\u9898\u76ee\u8868\u8fbe\u4e5f\u633a\u590d\u6742\u3002\u7b80\u5355\u6765\u8bf4\uff0c\u5c31\u662f\u628a\u4e00\u4e2a\u6570W\u62c6\u6210\u82e5\u5e72\u4e2aFib(Fib(x))\u4e4b\u548c\uff0c\u5176\u4e2dx\u5404\u4e0d\u76f8\u540c\u3002\u9898\u76ee\u6570\u636e\u662f<span class=\"katex-eq\" data-katex-display=\"false\">1 \\leq W \\leq 10^{100000}<\/span>\uff0c\u4e4d\u4e00\u770b\u597d\u50cf\u5f88\u5938\u5f20\u3002\u5176\u5b9e\u53bb\u7b97<span class=\"katex-eq\" data-katex-display=\"false\">Fib \\left( x \\right) \\leq 10^{100000}<\/span>\u5c31\u4f1a\u53d1\u73b0\uff0c\u5176\u5b9e\u4e5f\u5c31<span class=\"katex-eq\" data-katex-display=\"false\">x \\leq 317811<\/span>\uff0c\u518d\u7b97<span class=\"katex-eq\" data-katex-display=\"false\">Fib \\left( x \\right) \\leq 317811<\/span>\uff0c\u53d1\u73b0\u5176\u5b9e\u4e5f\u5c3128\u4e2a\u6570\u3002\u4e0d\u8fc7\u8fd928\u4e2a\u6570\u771f\u7684\u633a\u957f\u7684\uff0c\u6253\u8868\u8fd8\u771f\u6253\u4e0d\u4e0b\uff0c\u597d\u5728Fib\u73b0\u7b97\u4e00\u904d\u4e5f\u5c31O(logN)\u3002<\/p>\n<p>\u7136\u540e\u62c6\u6570\u6211\u5199\u7684\u5c31\u5f88low\u4e86\uff0c\u7531\u4e8e\u5b57\u5178\u5e8f\u6700\u5c0f\uff0c\u6211\u5c31\u7528\u4e86<span class=\"katex-eq\" data-katex-display=\"false\">O\\left( n^2 \\right)<\/span>\u7684\u6734\u7d20\u65b9\u6cd5\u3002\u5176\u5b9e\u53ea\u67092\u548c5\u9700\u8981\u5904\u7406\uff0c\u4f46\u662f\u7b2c\u4e00\u6b21\u4ea4\u7684\u65f6\u5019\u597d\u50cf\u6211\u5176\u5b83\u5730\u65b9\u6f0f\u4e86\u4e2a\u6761\u4ef6\uff0c\u4e8e\u662fWA\u4e86\u3002\u540e\u6765\u4fdd\u9669\u5c31\u7528\u4e86\uff0c\u603b\u590d\u6742\u5ea6\u662f<span class=\"katex-eq\" data-katex-display=\"false\">O\\left( 28^2 T + \\log N \\right)<\/span>\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-title=\"\">import java.math.BigInteger;\r\nimport java.util.Scanner;\r\n\r\npublic class Main {\r\n    \/\/ \u6253\u8868\uff0c\u524d28\u9879\r\n    final static int[] ind = {0,1,2,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811};\r\n    static boolean[] inS = new boolean[30];\r\n    static boolean[] used = new boolean[30];\r\n    static BigInteger[] ff = new BigInteger[30];\r\n    static int sCnt;\r\n\r\n    static boolean check(BigInteger W, int st) {\r\n        int curCheck = st;\r\n        sCnt = 0;\r\n        for (int i = 1; i &lt; ind.length; i++) used[i] = false;\r\n        while (W.compareTo(BigInteger.ZERO) &gt; 0 &amp;&amp; curCheck &gt; 0) {\r\n            if (!inS[curCheck] &amp;&amp; W.compareTo(ff[curCheck]) &gt;= 0) {\r\n                W = W.subtract(ff[curCheck]);\r\n                used[curCheck] = true;\r\n                sCnt++;\r\n            }\r\n            curCheck--;\r\n        }\r\n        if (sCnt &gt; 0 &amp;&amp; W.equals(BigInteger.ZERO)) {\r\n            for (int i = 1; i &lt; ind.length; i++) inS[i] = inS[i] || used[i];\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        int curInd, cnt;\r\n        BigInteger fn_2, fn_1, fn;\r\n        fn_2 = BigInteger.ONE;\r\n        fn_1 = BigInteger.ONE;\r\n        ff[1] = BigInteger.ONE; ff[2] = BigInteger.ONE; ff[3] = BigInteger.ONE;\r\n        cnt = 2; curInd = 4;\r\n        while (curInd &lt; ind.length) {\r\n            fn = fn_2.add(fn_1);\r\n            fn_2 = fn_1;\r\n            fn_1 = fn;\r\n            cnt++;\r\n            if (cnt == ind[curInd]) {\r\n                ff[curInd] = fn;\r\n                curInd++;\r\n            }\r\n        }\r\n        \/\/ \u8bfb\u5165\r\n        Scanner sc = new Scanner(System.in);\r\n        int T, curCheck;\r\n        BigInteger W;\r\n        T = sc.nextInt();\r\n        while (T-- &gt; 0) {\r\n            W = sc.nextBigInteger();\r\n            sCnt = 0; \/\/ \u96c6\u5408S\u5927\u5c0f\r\n            \/\/ \u521d\u59cb\u5316inS\r\n            for (int i = 1; i &lt; ind.length; i++) inS[i] = false;\r\n            \/\/ \u68c0\u67e5\r\n            if (!check(W, ind.length - 1)) {\r\n                \/\/ \u5931\u8d25\r\n                System.out.println(&quot;-1&quot;);\r\n                continue;\r\n            }\r\n            \/\/ \u5bf9\u6bcf\u4e2a\u6570\uff0c\u5411\u524d\u5206\u5272\r\n            BigInteger num;\r\n            curCheck = ind.length - 1;\r\n            while (curCheck &gt; 0) {\r\n                while (curCheck &gt; 0 &amp;&amp; !inS[curCheck]) curCheck--;\r\n                if (!inS[curCheck]) break;\r\n                \/\/ inS[curCheck] = true\r\n                if (check(ff[curCheck], curCheck - 1)) {\r\n                    inS[curCheck] = false;\r\n                }\r\n                curCheck--;\r\n            }\r\n            \/\/ \u91cd\u65b0\u8ba1\u7b97sCnt\r\n            sCnt = 0;\r\n            for (int i = 1; i &lt; ind.length; i++) if (inS[i]) sCnt += 1;\r\n            \/\/ \u6253\u5370\r\n            for (int i = 1; i &lt; ind.length; i++) {\r\n                if (inS[i]) {\r\n                    System.out.print(i);\r\n                    sCnt--;\r\n                    if (sCnt &gt; 0) System.out.print(&#039; &#039;);\r\n                }\r\n            }\r\n            System.out.println();\r\n        }\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>\u672c\u6765\u4ee5\u4e3a\u8fd8\u662f\u7b7e\u5b8c\u5230\u5c31\u5f00\u59cb\u81ea\u95ed\uff0c\u6ca1\u60f3\u5230\u4eca\u5929\u7684\u9080\u8bf7\u8d5b\u8fd8\u6478\u51fa\u4e00\u9053C\u3002\u8fd9\u9898\u770b\u63d0\u4ea4\u6570\u5176\u5b9e\u4e0d\u591a\uff0c\u800c\u4e14\u9898\u76ee\u8868\u8fbe\u4e5f\u633a\u590d\u6742\u3002\u7b80\u5355 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.kaaass.net\/acm\/2019\/04\/%e5%8d%97%e6%98%8cicpc%e9%82%80%e8%af%b7%e8%b5%9bc-angry-fff-party-%e9%ab%98%e7%b2%be%e6%9a%b4%e5%8a%9b\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201c\u5357\u660cICPC\u9080\u8bf7\u8d5bC.Angry FFF Party &#8211; \u9ad8\u7cbe\u66b4\u529b\u201d<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-20","post","type-post","status-publish","format-standard","hentry","category-3","entry"],"_links":{"self":[{"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/posts\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/comments?post=20"}],"version-history":[{"count":0,"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/posts\/20\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/media?parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/categories?post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kaaass.net\/acm\/wp-json\/wp\/v2\/tags?post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}