From 4a54b9c4292e22e170279e8a3900720f55adae59 Mon Sep 17 00:00:00 2001 From: feilong <fanfeilong@outlook.com> Date: Wed, 17 Nov 2021 22:59:48 +0800 Subject: [PATCH] auto replace math markdown --- .../solution.json" | 2 +- .../solution.md.md" | 89 ++++ .../solution.json" | 2 +- .../solution.md.md" | 107 +++++ .../solution.json" | 2 +- .../solution.md.md" | 102 +++++ .../solution.json" | 2 +- .../solution.md.md" | 414 +++++++++++++++++ .../solution.json" | 2 +- .../solution.md.md" | 189 ++++++++ .../solution.json" | 2 +- .../solution.md.md" | 283 ++++++++++++ .../solution.json" | 2 +- .../solution.md.md" | 241 ++++++++++ .../6.\347\263\226\346\236\234/solution.json" | 2 +- .../solution.md.md" | 243 ++++++++++ .../solution.json" | 2 +- .../solution.md.md" | 416 ++++++++++++++++++ main.py | 4 + src/math.py | 107 +++++ 20 files changed, 2204 insertions(+), 9 deletions(-) create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.md.md" create mode 100644 "data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.md.md" create mode 100644 src/math.py diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.json" index af410ad11..4a7416c5b 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "d5ad2458a40a46daaf75bbb9291e6d4b" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.md.md" new file mode 100644 index 000000000..5f18c7a01 --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/30.k\345\200\215\345\214\272\351\227\264/solution.md.md" @@ -0,0 +1,89 @@ +# kå€åŒºé—´ + + +**问题æè¿°** + +给定一个长度为N的数列,A<sub>1</sub>, A<sub>2</sub>, … A<sub>N</sub>,如果其ä¸ä¸€æ®µè¿žç»çš„ååºåˆ—A<sub>1</sub>, A<sub>2</sub>, … A<sub>N</sub>,A<sub>i</sub>, A<sub>i+1</sub>, … A<sub>j</sub>(i <= j)之和是Kçš„å€æ•°ï¼Œæˆ‘们就称这个区间[i, j]是Kå€åŒºé—´ã€‚ + +ä½ èƒ½æ±‚å‡ºæ•°åˆ—ä¸æ€»å…±æœ‰å¤šå°‘个Kå€åŒºé—´å—? + +**è¾“å…¥æ ¼å¼** + +第一行包å«ä¸¤ä¸ªæ•´æ•°Nå’ŒK。(1 <= N, K <= 100000) + +以下Nè¡Œæ¯è¡ŒåŒ…å«ä¸€ä¸ªæ•´æ•°A<sub>1</sub>, A<sub>2</sub>, … A<sub>N</sub>,A<sub>i</sub>, A<sub>i+1</sub>, … A<sub>j</sub>(i <= j)A<sub>i</sub>。(1 <= A<sub>1</sub>, A<sub>2</sub>, … A<sub>N</sub>,A<sub>i</sub>, A<sub>i+1</sub>, … A<sub>j</sub>(i <= j)A<sub>i</sub>A<sub>i</sub> <= 100000) + +**è¾“å‡ºæ ¼å¼** + +输出一个整数,代表Kå€åŒºé—´çš„数目。 + +**æ ·ä¾‹è¾“å…¥** + +``` +5 2 +1 +2 +3 +4 +5 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +6 +``` + +以下程åºå®žçŽ°äº†è¯¥åŠŸèƒ½ï¼Œè¯·ä½ 补全空白处代ç : + +```c +#include <bits/stdc++.h> +using namespace std; + +int main() +{ + long long n, k, ans = 0, son[100000], sum[100000], b[100000] = {0}; + cin >> n >> k; + for (int i = 0; i < n; i++) + { + cin >> son[i]; + if (i != 0) + __________________ + else + sum[i] = son[i] % k; + b[sum[i]]++; + ans += b[sum[i]] - 1; + if (sum[i] == 0) + ans++; + } + cout << ans; + return 0; +} +``` + + +## ç”案 + +```c +sum[i] = (sum[i - 1] + son[i]) % k; +``` + +## 选项 + +### A + +```c +sum[i] = (sum[i] + son[i]) % k; +``` + +### B + +```c +sum[i] = (sum[i - 1] + son[i]) % k - 1; +``` + +### C + +```c +sum[i] = (sum[i - 1] + son[i - 1]) % k; +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.json" index 93d29f85f..defcc835f 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "e572003202d0462fa95f635381897624" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.md.md" new file mode 100644 index 000000000..c5296c4a4 --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/1.\350\223\235\346\241\245\346\235\257-\345\237\272\347\241\200/37.\345\271\263\351\235\242\345\210\207\345\210\206/solution.md.md" @@ -0,0 +1,107 @@ +# å¹³é¢åˆ‡åˆ† + + +**问题æè¿°** + +å¹³é¢ä¸Šæœ‰ Næ¡ç›´çº¿ï¼Œå…¶ä¸ç¬¬ iæ¡ç›´çº¿æ˜¯ y = A<sub>i</sub>*x + B<sub>i</sub>。 + +请计算这些直线将平é¢åˆ†æˆäº†å‡ 个部分。 + + +**è¾“å…¥æ ¼å¼** + +第一行包å«ä¸€ä¸ªæ•´æ•°N。 + +以下N行,æ¯è¡ŒåŒ…å«ä¸¤ä¸ªæ•´æ•° y = A<sub>i</sub>*x + B<sub>i</sub>A<sub>i</sub>, B<sub>i</sub>。 + + +**è¾“å‡ºæ ¼å¼** + +一个整数代表ç”案。 + + +**æ ·ä¾‹è¾“å…¥** + +``` +3 +1 1 +2 2 +3 3 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +6 +``` + +以下程åºå®žçŽ°äº†è¿™ä¸€åŠŸèƒ½ï¼Œè¯·ä½ 补全空白处的内容: + +```c +#include <bits/stdc++.h> +using namespace std; + +long double s[1010][2]; +long long ans; +bool st[1010]; +pair<long double, long double> p; + +int main() +{ + int n; + cin >> n; + for (int i = 0; i < n; i++) + { + cin >> s[i][0] >> s[i][1]; + set<pair<long double, long double>> points; + for (int j = 0; j < i; j++) + { + if (st[j]) + continue; + if (s[i][0] == s[j][0]) + { + if (s[i][1] == s[j][1]) + { + st[i] = true; + break; + } + else + continue; + } + __________________ + p.second = s[i][0] * p.first + s[i][1]; + points.insert(p); + } + if (!st[i]) + ans += points.size() + 1; + } + cout << ans + 1; + return 0; +} +``` + +## ç”案 + +```c +p.first = (s[j][1] - s[i][1]) / (s[i][0] - s[j][0]); +``` + +## 选项 + +### A + +```c +p.first = (s[j][1] - s[i][1]) / (s[i][1] - s[j][1]); +``` + +### B + +```c +p.first = (s[j][0] - s[i][0]) / (s[i][0] - s[j][0]); +``` + +### C + +```c +p.first = (s[j][0] - s[i][0]) / (s[i][1] - s[j][1]); +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.json" index d41245a5b..000de9c9d 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "c29652154669434cb71e4f036b690fef" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.md.md" new file mode 100644 index 000000000..47255f52a --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/3.\350\223\235\346\241\245\346\235\257-\351\200\222\345\275\222/7.\351\200\206\346\263\242\345\205\260\350\241\250\350\276\276\345\274\217/solution.md.md" @@ -0,0 +1,102 @@ +# é€†æ³¢å…°è¡¨è¾¾å¼ + +æ£å¸¸çš„表达å¼ç§°ä¸ºä¸ç¼€è¡¨è¾¾å¼ï¼Œè¿ç®—符在ä¸é—´ï¼Œä¸»è¦æ˜¯ç»™äººé˜…读的,机器求解并ä¸æ–¹ä¾¿ã€‚ + +例如:3 + 5 * (2 + 6) - 1 + +而且,常常需è¦ç”¨æ‹¬å·æ¥æ”¹å˜è¿ç®—次åºã€‚ + +相å,如果使用逆波兰表达å¼ï¼ˆå‰ç¼€è¡¨è¾¾å¼ï¼‰è¡¨ç¤ºï¼Œä¸Šé¢çš„ç®—å¼åˆ™è¡¨ç¤ºä¸ºï¼š + +``` +- + 3 * 5 + 2 6 1 +``` + +ä¸å†éœ€è¦æ‹¬å·ï¼Œæœºå™¨å¯ä»¥ç”¨é€’归的方法很方便地求解。 + +为了简便,我们å‡è®¾ï¼š + +1. åªæœ‰ + - * 三ç§è¿ç®—符 + +2. æ¯ä¸ªè¿ç®—数都是一个å°äºŽ10çš„éžè´Ÿæ•´æ•° + +下é¢çš„程åºå¯¹ä¸€ä¸ªé€†æ³¢å…°è¡¨ç¤ºä¸²è¿›è¡Œæ±‚值。 + +其返回值为一个数组:其ä¸ç¬¬ä¸€å…ƒç´ è¡¨ç¤ºæ±‚å€¼ç»“æžœï¼Œç¬¬äºŒä¸ªå…ƒç´ è¡¨ç¤ºå®ƒå·²è§£æžçš„å—符数。 + +è¯·ä½ è¡¥å…¨ä»£ç : + +```c +#include <bits/stdc++.h> +using namespace std; + +struct EV +{ + int result; + int n; +}; + +struct EV evaluate(char *x) +{ + struct EV ev = {0, 0}; + struct EV v1; + struct EV v2; + + if (*x == 0) + return ev; + + if (x[0] >= '0' && x[0] <= '9') + { + ev.result = x[0] - '0'; + ev.n = 1; + return ev; + } + + v1 = evaluate(x + 1); + __________________ + + if (x[0] == '+') + ev.result = v1.result + v2.result; + if (x[0] == '*') + ev.result = v1.result * v2.result; + if (x[0] == '-') + ev.result = v1.result - v2.result; + ev.n = 1 + v1.n + v2.n; + + return ev; +} + +int main(int argc, char **argv) +{ + string str = "-+3*5+261"; + const EV &ev = evaluate((char *)(str.c_str())); + cout << ev.result << endl; + return 0; +} +``` + +## ç”案 + +```c +v2 = evaluate(x + v1.n + 1); +``` + +## 选项 + +### A + +```c +v2 = evaluate(x + v1.n); +``` + +### B + +```c +v2 = evaluate(v1.n); +``` + +### C + +```c +v2 = evaluate(v1.n + 1); +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.json" index cd2e5726f..eec17ba9c 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "a7672a561bd14ce5ba8bca21c4074683" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.md.md" new file mode 100644 index 000000000..a34c491e8 --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/13.\347\201\265\350\203\275\344\274\240\350\276\223/solution.md.md" @@ -0,0 +1,414 @@ +# çµèƒ½ä¼ 输 + + +**题目背景** + +在游æˆã€Šæ˜Ÿé™…争霸 II》ä¸ï¼Œé«˜é˜¶åœ£å ‚æ¦å£«ä½œä¸ºæ˜Ÿçµçš„é‡è¦ AOE å•ä½ï¼Œåœ¨æ¸¸æˆçš„ä¸åŽæœŸå‘挥ç€é‡è¦çš„作用,其技能â€çµèƒ½é£Žæš´â€œå¯ä»¥æ¶ˆè€—大é‡çš„çµèƒ½å¯¹ä¸€ç‰‡åŒºåŸŸå†…çš„æ•Œå†›é€ æˆæ¯ç性的伤害。ç»å¸¸ç”¨äºŽå¯¹æŠ—人类的生化部队和虫æ—的刺蛇飞龙ç‰ä½Žè¡€é‡å•ä½ã€‚ + +**问题æè¿°** + +ä½ æŽ§åˆ¶ç€ n åé«˜é˜¶åœ£å ‚æ¦å£«ï¼Œæ–¹ä¾¿èµ·è§æ ‡ä¸º 1,2,··· ,n。æ¯åé«˜é˜¶åœ£å ‚æ¦å£«éœ€è¦ä¸€å®šçš„çµèƒ½æ¥æˆ˜æ–—,æ¯ä¸ªäººæœ‰ä¸€ä¸ªçµèƒ½å€¼a<sub>i</sub>表示其拥有的çµèƒ½çš„多少(a<sub>i</sub>a<sub>i</sub>éžè´Ÿè¡¨ç¤ºè¿™åé«˜é˜¶åœ£å ‚æ¦å£«æ¯”在最佳状æ€ä¸‹å¤šä½™äº†a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>点çµèƒ½ï¼Œa<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>为负则表示这åé«˜é˜¶åœ£å ‚æ¦å£«è¿˜éœ€è¦a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub>点çµèƒ½æ‰èƒ½åˆ°è¾¾æœ€ä½³æˆ˜æ–—状æ€ï¼‰ ã€‚çŽ°åœ¨ç³»ç»Ÿèµ‹äºˆäº†ä½ çš„é«˜é˜¶åœ£å ‚æ¦å£«ä¸€ä¸ªèƒ½åŠ›ï¼Œä¼ 递çµèƒ½ï¼Œæ¯æ¬¡ä½ å¯ä»¥é€‰æ‹©ä¸€ä¸ªa<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1],若a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 则其两æ—çš„é«˜é˜¶åœ£å ‚æ¦å£«ï¼Œä¹Ÿå°±æ˜¯a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 这两åé«˜é˜¶åœ£å ‚æ¦å£«ä¼šä»Ži è¿™åé«˜é˜¶åœ£å ‚æ¦å£«è¿™é‡Œå„抽å–a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> 点çµèƒ½ï¼›è‹¥a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 则其两æ—çš„é«˜é˜¶åœ£å ‚æ¦å£«ï¼Œä¹Ÿå°±æ˜¯a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 i−1,i+1 这两åé«˜é˜¶åœ£å ‚æ¦å£«ä¼šç»™ i è¿™åé«˜é˜¶åœ£å ‚æ¦å£«a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 i−1,i+1 −a<sub>i</sub> 点çµèƒ½ã€‚å½¢å¼åŒ–æ¥è®²å°±æ˜¯a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 i−1,i+1 −a<sub>i</sub> a<sub>i-1</sub> + = a<sub>i</sub> ,a<sub>i+1</sub> + = a<sub>i</sub> ,a<sub>i</sub> − = 2a<sub>i</sub> 。 + +çµèƒ½æ˜¯éžå¸¸é«˜æ•ˆçš„作战工具,åŒæ—¶ä¹Ÿéžå¸¸å±é™©ä¸”ä¸ç¨³å®šï¼Œä¸€ä½é«˜é˜¶åœ£å ‚æ¦å£«æ‹¥æœ‰çš„çµèƒ½è¿‡å¤šæˆ–者过少都ä¸å¥½ï¼Œå®šä¹‰ä¸€ç»„é«˜é˜¶åœ£å ‚æ¦å£«çš„ä¸ç¨³å®šåº¦ä¸ºa<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 i−1,i+1 −a<sub>i</sub> a<sub>i-1</sub> + = a<sub>i</sub> ,a<sub>i+1</sub> + = a<sub>i</sub> ,a<sub>i</sub> − = 2a<sub>i</sub> max<sup>n</sup><sub>i=1</sub> |a<sub>i</sub>|ï¼Œè¯·ä½ é€šè¿‡ä¸é™æ¬¡æ•°çš„ä¼ é€’çµèƒ½æ“ä½œä½¿å¾—ä½ æŽ§åˆ¶çš„è¿™ä¸€ç»„é«˜é˜¶åœ£å ‚æ¦å£«çš„ä¸ç¨³å®šåº¦æœ€å°ã€‚ + +**è¾“å…¥æ ¼å¼** + +本题包å«å¤šç»„询问。输入的第一行包å«ä¸€ä¸ªæ£æ•´æ•° T 表示询问组数。 + +接下æ¥ä¾æ¬¡è¾“å…¥æ¯ä¸€ç»„询问。 + +æ¯ç»„询问的第一行包å«ä¸€ä¸ªæ£æ•´æ•° nï¼Œè¡¨ç¤ºé«˜é˜¶åœ£å ‚æ¦å£«çš„æ•°é‡ã€‚ + +接下æ¥ä¸€è¡ŒåŒ…å« n 个数 a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>a<sub>i</sub>-a<sub>i</sub> i ∈ [2,n − 1]a<sub>i</sub> ≥ 0 i − 1ã€i + 1 a<sub>i</sub> a<sub>i</sub> < 0 i−1,i+1 −a<sub>i</sub> a<sub>i-1</sub> + = a<sub>i</sub> ,a<sub>i+1</sub> + = a<sub>i</sub> ,a<sub>i</sub> − = 2a<sub>i</sub> max<sup>n</sup><sub>i=1</sub> |a<sub>i</sub>|a<sub>1</sub> ,a<sub>2</sub> ,··· ,a<sub>n</sub> 。 + +**è¾“å‡ºæ ¼å¼** + +输出 T 行。æ¯è¡Œä¸€ä¸ªæ•´æ•°ä¾æ¬¡è¡¨ç¤ºæ¯ç»„询问的ç”案。 + +**æ ·ä¾‹è¾“å…¥** + +``` +3 +3 +5 -2 3 +4 +0 0 0 0 +3 +1 2 3 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +3 +0 +3 +``` + +**æ ·ä¾‹è¯´æ˜Ž** + +``` +对于第一组询问: +对 2 å·é«˜é˜¶åœ£å ‚æ¦å£«è¿›è¡Œä¼ 输æ“ä½œåŽ a 1 = 3,a 2 = 2,a 3 = 1。ç”案为 3。 +对于第二组询问: +è¿™ä¸€ç»„é«˜é˜¶åœ£å ‚æ¦å£«æ‹¥æœ‰çš„çµèƒ½éƒ½æ£å¥½å¯ä»¥è®©ä»–们达到最佳战斗状æ€ã€‚ +``` + +**æ ·ä¾‹è¾“å…¥** + +``` +3 +4 +-1 -2 -3 7 +4 +2 3 4 -8 +5 +-1 -1 6 -1 -1 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +5 +7 +4 +``` + +以下选项<span style="color:red">错误</span>的是? + +## aop + +### before + +```c +#include <bits/stdc++.h> +using namespace std; +``` + +### after + +```c + +``` + +## ç”案 + +```c +typedef long long ll; +#define int ll +#define rep(i, a, n) for (int i = a; i < (int)n; i++) +#define per(i, a, n) for (int i = (int)n - 1; i >= a; i--) +const int maxn = 3e5 + 10; +inline int read() +{ + int x = 0, f = 1; + char ch = getchar(); + while (!isdigit(ch)) + { + if (ch == '-') + f = -1; + ch = getchar(); + } + while (isdigit(ch)) + { + x = (x << 3) + (x << 1) + ch - 48; + ch = getchar(); + } + return x * f; +} +int s[maxn], a[maxn]; +bool vis[maxn]; +inline void cf() +{ + int t = read(); + while (t--) + { + int n = read(); + s[0] = 0; + rep(i, 1, n + 1) + { + int x = read(); + s[i] = s[i + 1] + x; + } + int s0 = 0, sn = s[n]; + if (s0 > sn) + swap(s0, sn); + sort(s, s + n + 1); + rep(i, 0, n + 1) if (s[i] == s0) + { + s0 = i; + break; + } + per(i, 0, n + 1) if (s[i] == sn) + { + sn = i; + break; + } + int l = 0, r = n; + rep(i, 0, n + 1) vis[i] = 0; + for (int i = s0; i >= 0; i -= 2) + a[l++] = s[i], vis[i] = 1; + for (int i = sn; i <= n; i += 2) + a[r--] = s[i], vis[i] = 1; + rep(i, 0, n + 1) if (!vis[i]) a[l++] = s[i]; + int ans = 0; + rep(i, 1, n + 1) ans = max(ans, abs(a[i] - a[i - 1])); + printf("%lld\n", ans); + } + return; +} +signed main() +{ + cf(); + return 0; +} +``` + +## 选项 + +### A + +```c +#define ll long long +const int N = 3e5; +ll a[N], s[N]; +bool vis[N]; +int n; +int main() +{ + int T; + scanf("%d", &T); + while (T--) + { + memset(vis, 0, sizeof(vis)); + scanf("%d", &n); + s[0] = 0; + for (int i = 1; i <= n; ++i) + { + scanf("%lld", &s[i]); + s[i] += s[i - 1]; + } + ll s0 = 0, sn = s[n]; + if (s0 > sn) + swap(s0, sn); + sort(s, s + n + 1); + int l = 0, r = n; + for (int i = lower_bound(s, s + n + 1, s0) - s; i >= 0; i -= 2) + { + a[l++] = s[i], vis[i] = 1; + } + for (int i = lower_bound(s, s + n + 1, sn) - s; i <= n; i += 2) + { + a[r--] = s[i], vis[i] = 1; + } + for (int i = 0; i <= n; ++i) + { + if (!vis[i]) + a[l++] = s[i]; + } + ll res = 0; + for (int i = 1; i <= n; ++i) + res = max(res, abs(a[i] - a[i - 1])); + printf("%lld\n", res); + } + return 0; +} +``` + +### B + +```c +const int MAXN = 300010; +int nums[MAXN]; + +bool judgeYi(int a, int b) +{ + return a > 0 && b < 0 || a < 0 && b > 0; +} + +int main() +{ + int T, n; + cin >> T; + while (T--) + { + cin >> n; + + bool hasNe = false, hasPo = false; + int res = 0; + for (int i = 0; i < n; i++) + { + scanf("%d", &nums[i]); + if (nums[i] < 0) + { + hasNe = true; + } + else if (nums[i] > 0) + { + hasPo = true; + } + } + + if (hasNe && hasPo) + { + bool canNext; + do + { + canNext = false; + for (int i = 1; i < n - 1; i++) + { + + if (judgeYi(nums[i], nums[i - 1]) || judgeYi(nums[i], nums[i + 1])) + { + if (nums[i] > 0) + { + + if (judgeYi(nums[i - 1], nums[i + 1])) + { + if ((nums[i - 1] > 0 && abs(nums[i + 1]) > nums[i - 1] + nums[i]) || + (nums[i + 1] > 0 && abs(nums[i - 1]) > nums[i + 1] + nums[i])) + { + nums[i + 1] += nums[i]; + nums[i - 1] += nums[i]; + nums[i] = -nums[i]; + canNext = true; + } + } + else + { + if (abs(nums[i - 1]) > nums[i] || abs(nums[i + 1]) > nums[i]) + { + nums[i + 1] += nums[i]; + nums[i - 1] += nums[i]; + nums[i] = -nums[i]; + canNext = true; + } + } + } + else if (nums[i] < 0) + { + + if (judgeYi(nums[i - 1], nums[i + 1])) + { + if ((nums[i - 1] > 0 && nums[i - 1] > abs(nums[i + 1] + nums[i])) || + (nums[i + 1] > 0 && nums[i + 1] > abs(nums[i - 1] + nums[i]))) + { + nums[i + 1] += nums[i]; + nums[i - 1] += nums[i]; + nums[i] = -nums[i]; + canNext = true; + } + } + else + { + if (nums[i - 1] > abs(nums[i]) || nums[i + 1] > abs(nums[i])) + { + nums[i + 1] += nums[i]; + nums[i - 1] += nums[i]; + nums[i] = -nums[i]; + canNext = true; + } + } + } + } + } + } while (canNext); + } + int t; + + for (int i = 0; i < n; i++) + { + res = max(res, abs(nums[i])); + } + cout << res << endl; + } + + return 0; +} +``` + +### C + +```c +typedef long long LL; +const int INF = 0x3f3f3f3f; +const double Pi = acos(-1); +namespace +{ + template <typename T> + inline void read(T &x) + { + x = 0; + T f = 1; + char s = getchar(); + for (; !isdigit(s); s = getchar()) + if (s == '-') + f = -1; + for (; isdigit(s); s = getchar()) + x = (x << 3) + (x << 1) + (s ^ 48); + x *= f; + } +} +#define fio \ + ios::sync_with_stdio(false); \ + cin.tie(0); \ + cout.tie(0); +#define _for(n, m, i) for (register int i = (n); i < (m); ++i) +#define _rep(n, m, i) for (register int i = (n); i <= (m); ++i) +#define _srep(n, m, i) for (register int i = (n); i >= (m); i--) +#define _sfor(n, m, i) for (register int i = (n); i > (m); i--) +#define lson rt << 1, l, mid +#define rson rt << 1 | 1, mid + 1, r +#define lowbit(x) x &(-x) +#define pii pair<int, int> +#define fi first +#define se second +const int N = 1e6 + 5; +LL a[N]; +LL ans[N]; +bool vis[N]; +LL Abs(LL x) +{ + return x < 0 ? -x : x; +} +int main() +{ + int t; + scanf("%d", &t); + while (t--) + { + int n; + scanf("%d", &n); + a[0] = 0; + _rep(1, n, i) + { + scanf("%lld", a + i); + a[i] += a[i - 1]; + } + LL a0 = 0, an = a[n], Max = 0; + int A0, AN; + sort(a, a + n + 1); + memset(vis, 0, sizeof vis); + if (a0 > an) + swap(a0, an); + _rep(0, n, i) if (a0 == a[i]) + { + A0 = i; + break; + } + _rep(0, n, i) if (an == a[i]) + { + AN = i; + break; + } + int l = 0, r = n; + for (int i = A0; i >= 0; i -= 2) + ans[l++] = a[i], vis[i] = 1; + for (int i = AN; i <= n; i += 2) + ans[r--] = a[i], vis[i] = 1; + _rep(0, n, i) if (!vis[i]) ans[l++] = a[i]; + _rep(1, n, i) Max = max(Max, Abs(ans[i] - ans[i - 1])); + printf("%lld\n", Max); + } +} +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.json" index c5d297c51..192079265 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "4db03bcefa5649d19f4dd5fe293221ab" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.md.md" new file mode 100644 index 000000000..f227736bc --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/5.\350\223\235\346\241\245\346\235\257-\346\250\241\346\213\237/16.\344\270\211\344\275\223\346\224\273\345\207\273/solution.md.md" @@ -0,0 +1,189 @@ +# 三体攻击 + + +**题目æè¿°** + +三体人将对地çƒå‘起攻击。为了抵御攻击,地çƒäººæ´¾å‡ºäº† A × B × C 艘战舰,在太空ä¸æŽ’æˆä¸€ä¸ª A 层 B è¡Œ C 列的立方体。其ä¸ï¼Œç¬¬ i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。 + +三体人将会对地çƒå‘èµ· m 轮“立方体攻击â€ï¼Œæ¯æ¬¡æ”»å‡»ä¼šå¯¹ä¸€ä¸ªå°ç«‹æ–¹ä½“ä¸çš„æ‰€æœ‰æˆ˜èˆ°éƒ½é€ æˆç›¸åŒçš„伤害。具体地,第 t 轮攻击用 7 个å‚æ•° la<sub>t</sub>, ra<sub>t</sub>, lb<sub>t</sub>, rb<sub>t</sub>, lc<sub>t</sub>, rc<sub>t</sub>, h<sub>t</sub> æè¿°ï¼› + +所有满足la<sub>t</sub>, ra<sub>t</sub>, lb<sub>t</sub>, rb<sub>t</sub>, lc<sub>t</sub>, rc<sub>t</sub>, h<sub>t</sub> i ∈ [la<sub>t</sub>, ra<sub>t</sub>],j ∈ [lb<sub>t</sub>, rb<sub>t</sub>],k ∈ [lc<sub>t</sub>, rc<sub>t</sub>] 的战舰 (i, j, k) 会å—到 la<sub>t</sub>, ra<sub>t</sub>, lb<sub>t</sub>, rb<sub>t</sub>, lc<sub>t</sub>, rc<sub>t</sub>, h<sub>t</sub> i ∈ [la<sub>t</sub>, ra<sub>t</sub>],j ∈ [lb<sub>t</sub>, rb<sub>t</sub>],k ∈ [lc<sub>t</sub>, rc<sub>t</sub>] h<sub>t</sub> 的伤害。如果一个战舰累计å—到的总伤害超过其防御力,那么这个战舰会爆炸。 + +地çƒæŒ‡æŒ¥å®˜å¸Œæœ›ä½ 能告诉他,第一艘爆炸的战舰是在哪一轮攻击åŽçˆ†ç‚¸çš„。 + + +**è¾“å…¥æ ¼å¼** + +ä»Žæ ‡å‡†è¾“å…¥è¯»å…¥æ•°æ®ã€‚ + +第一行包括 4 个æ£æ•´æ•° A, B, C, mï¼› + +ç¬¬äºŒè¡ŒåŒ…å« A × B × C 个整数,其ä¸ç¬¬ ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k)ï¼› + +第 3 到第 m + 2 è¡Œä¸ï¼Œç¬¬ (t − 2) è¡ŒåŒ…å« 7 个æ£æ•´æ•° la<sub>t</sub>, ra<sub>t</sub>, lb<sub>t</sub>, rb<sub>t</sub>, lc<sub>t</sub>, rc<sub>t</sub>, h<sub>t</sub> i ∈ [la<sub>t</sub>, ra<sub>t</sub>],j ∈ [lb<sub>t</sub>, rb<sub>t</sub>],k ∈ [lc<sub>t</sub>, rc<sub>t</sub>] h<sub>t</sub>la<sub>t</sub>, ra<sub>t</sub>, lb<sub>t</sub>, rb<sub>t</sub>, lc<sub>t</sub>, rc<sub>t</sub>, h<sub>t</sub>。 + + +**è¾“å‡ºæ ¼å¼** + +è¾“å‡ºåˆ°æ ‡å‡†è¾“å‡ºã€‚ + +输出第一个爆炸的战舰是在哪一轮攻击åŽçˆ†ç‚¸çš„。ä¿è¯ä¸€å®šå˜åœ¨è¿™æ ·çš„战舰。 + + +**æ ·ä¾‹è¾“å…¥** + +``` +2 2 2 3 +1 1 1 1 1 1 1 1 +1 2 1 2 1 1 1 +1 1 1 2 1 2 1 +1 1 1 1 1 1 2 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +2 +``` + +**æ ·ä¾‹è§£é‡Š** + +在第 2 轮攻击åŽï¼Œæˆ˜èˆ° (1,1,1) 总共å—到了 2 点伤害,超出其防御力导致爆炸。 + + +**æ•°æ®çº¦å®š** + +``` +对于 10% çš„æ•°æ®ï¼ŒB = C = 1ï¼› +对于 20% çš„æ•°æ®ï¼ŒC = 1ï¼› +对于 40% çš„æ•°æ®ï¼ŒA × B × C, m ≤ 10, 000ï¼› +对于 70% çš„æ•°æ®ï¼ŒA, B, C ≤ 200ï¼› +对于所有数æ®ï¼ŒA × B × C ≤ 10^6, m ≤ 10^6, 0 ≤ d(i, j, k), ht ≤ 10^9。 +``` + +以下程åºå®žçŽ°äº†è¿™ä¸€åŠŸèƒ½ï¼Œè¯·ä½ 补全空白处的内容: + +```c +#include <bits/stdc++.h> +using namespace std; + +const int N = 2000010; + +typedef long long LL; +int A, B, C, m; +LL s[N], b[N], bp[N]; +int op[N / 2][7]; + +const int d[8][4] = { + {0, 0, 0, 1}, + {0, 0, 1, -1}, + {0, 1, 0, -1}, + {0, 1, 1, 1}, + {1, 0, 0, -1}, + {1, 0, 1, 1}, + {1, 1, 0, 1}, + {1, 1, 1, -1}}; + +int get(int i, int j, int k) +{ + + return (i * B + j) * C + k; +} + +bool check(int mid) +{ + memcpy(b, bp, sizeof bp); + for (int i = 1; i <= mid; i++) + { + int x1 = op[i][0], x2 = op[i][1], y1 = op[i][2], y2 = op[i][3], z1 = op[i][4], z2 = op[i][5], h = op[i][6]; + b[get(x1, y1, z1)] -= h; + b[get(x1, y1, z2 + 1)] += h; + b[get(x1, y2 + 1, z1)] += h; + b[get(x1, y2 + 1, z2 + 1)] -= h; + b[get(x2 + 1, y1, z1)] += h; + b[get(x2 + 1, y1, z2 + 1)] -= h; + b[get(x2 + 1, y2 + 1, z1)] -= h; + b[get(x2 + 1, y2 + 1, z2 + 1)] += h; + } + + memset(s, 0, sizeof s); + for (int i = 1; i <= A; i++) + for (int j = 1; j <= B; j++) + for (int k = 1; k <= C; k++) + { + s[get(i, j, k)] = b[get(i, j, k)]; + for (int u = 1; u < 8; u++) + { + int x = i - d[u][0], y = j - d[u][1], z = k - d[u][2], t = d[u][3]; + s[get(i, j, k)] -= s[get(x, y, z)] * t; + } + + if (s[get(i, j, k)] < 0) + return true; + } + + return false; +} + +int main() +{ + scanf("%d%d%d%d", &A, &B, &C, &m); + + for (int i = 1; i <= A; i++) + for (int j = 1; j <= B; j++) + for (int k = 1; k <= C; k++) + scanf("%lld", &s[get(i, j, k)]); + + for (int i = 1; i <= A; i++) + for (int j = 1; j <= B; j++) + for (int k = 1; k <= C; k++) + for (int u = 0; u < 8; u++) + { + int x = i - d[u][0], y = j - d[u][1], z = k - d[u][2], t = d[u][3]; + __________________ + } + + for (int i = 1; i <= m; i++) + for (int j = 0; j < 7; j++) + scanf("%d", &op[i][j]); + + int l = 1, r = m; + while (l < r) + { + int mid = l + r >> 1; + if (check(mid)) + r = mid; + else + l = mid + 1; + } + + printf("%d\n", r); + return 0; +} +``` + +## ç”案 + +```c +bp[get(i, j, k)] += s[get(x, y, z)] * t; +``` + +## 选项 + +### A + +```c +bp[get(i, j, k)] = s[get(x, y, z)] * t; +``` + +### B + +```c +bp[get(i, j, k)] *= s[get(x, y, z)] * t; +``` + +### C + +```c +bp[get(i, j, k)] = s[get(x, y, z)] + t; +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.json" index d534f3f68..688b9f956 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "8b374f1e3965460e97f165638222ab90" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.md.md" new file mode 100644 index 000000000..46cbf6fab --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/3.\350\243\205\351\245\260\347\217\240/solution.md.md" @@ -0,0 +1,283 @@ +# 装饰ç + +**题目æè¿°** + +在怪物猎人这一款游æˆä¸ï¼ŒçŽ©å®¶å¯ä»¥é€šè¿‡ç»™è£…备镶嵌ä¸åŒçš„装饰ç æ¥èŽ·å– 相应的技能,以æå‡è‡ªå·±çš„战斗能力。 + +已知猎人身上一共有 6 件装备,æ¯ä»¶è£…备å¯èƒ½æœ‰è‹¥å¹²ä¸ªè£…饰å”,æ¯ä¸ªè£…饰å”有å„自的ç‰çº§ï¼Œå¯ä»¥é•¶åµŒä¸€é¢—å°äºŽç‰äºŽè‡ªèº«ç‰çº§çš„装饰ç (也å¯ä»¥é€‰æ‹©ä¸é•¶åµŒ)。 + +装饰ç 有 M ç§ï¼Œç¼–å· 1 至 M,分别对应 M ç§æŠ€èƒ½ï¼Œç¬¬ i ç§è£…饰ç çš„ç‰çº§ä¸º L<sub>i</sub>,åªèƒ½é•¶åµŒåœ¨ç‰çº§å¤§äºŽç‰äºŽ L<sub>i</sub>L<sub>i</sub> 的装饰å”ä¸ã€‚ + +对第 i ç§æŠ€èƒ½æ¥è¯´ï¼Œå½“装备相应技能的装饰ç æ•°é‡è¾¾åˆ° L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>个时,会产生L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>(L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>)的价值,镶嵌åŒç±»æŠ€èƒ½çš„æ•°é‡è¶Šå¤šï¼Œäº§ç”Ÿçš„价值越大,å³L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>(L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>)<L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>(L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>)。但æ¯ä¸ªæŠ€èƒ½éƒ½æœ‰ä¸Šé™L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>(1≤L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>≤7),当装备的ç åæ•°é‡è¶…过L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>时,åªä¼šäº§ç”ŸL<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>(L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>)的价值。 + +对于给定的装备和装饰ç æ•°æ®ï¼Œæ±‚解如何镶嵌装饰ç ,使得 6 件装备能得到的总价值达到最大。 + +**输入æè¿°** + +输入的第 1 至 6 è¡Œï¼ŒåŒ…å« 6 件装备的æ述。其ä¸ç¬¬i行的第一个整数Ni表示第i件装备的装饰å”æ•°é‡ã€‚åŽé¢ç´§æŽ¥ç€Ni个整数,分别表示该装备上æ¯ä¸ªè£…饰å”çš„ç‰çº§L(1≤ L ≤4)。 + +第 7 行包å«ä¸€ä¸ªæ£æ•´æ•° M,表示装饰ç (技能) ç§ç±»æ•°é‡ã€‚ + +第 8 至 M + 7 行,æ¯è¡Œæ述一ç§è£…饰ç (技能) 的情况。æ¯è¡Œçš„å‰ä¸¤ä¸ªæ•´æ•°L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>(1≤ L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub> ≤4)å’ŒL<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>(1≤ L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>P<sub>j</sub> ≤7)分别表示第 j ç§è£…饰ç çš„ç‰çº§å’Œä¸Šé™ã€‚接下æ¥L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>P<sub>j</sub>P<sub>j</sub>个整数,其ä¸ç¬¬ k 个数表示装备该ä¸è£…饰ç æ•°é‡ä¸º k 时的价值L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>P<sub>j</sub>P<sub>j</sub>W<sub>j</sub>(k)。 + +å…¶ä¸L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>P<sub>j</sub>P<sub>j</sub>W<sub>j</sub>1 ≤ N<sub>i</sub> ≤ 50,1 ≤ M ≤ 10<sup>4</sup>,1 ≤ W<sub>j</sub>(k) ≤ 10<sup>4</sup>。 + +**输出æè¿°** + +输出一行包å«ä¸€ä¸ªæ•´æ•°ï¼Œè¡¨ç¤ºèƒ½å¤Ÿå¾—到的最大价值。 + +**输入** + +``` +1 1 +2 1 2 +1 1 +2 2 2 +1 1 +1 3 +3 +1 5 1 2 3 5 8 +2 4 2 4 8 15 +3 2 5 10 +``` + +**输出** + +``` +20 +``` + +**æ ·ä¾‹è¯´æ˜Ž** + +按照如下方å¼é•¶åµŒç å得到最大价值 20,括å·å†…表示镶嵌的装饰ç çš„ç§ç±»ç¼–å·ï¼š + +``` +1: (1) +2: (1) (2) +3: (1) +4: (2) (2) +5: (1) +6: (2) +``` + +4 颗技能 1 装饰ç ,4 颗技能 2 装饰ç L<sub>i</sub>L<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i</sub>W<sub>i</sub>K<sub>i-1</sub>W<sub>i</sub>K<sub>i</sub>P<sub>i</sub>P<sub>i</sub>P<sub>i</sub>W<sub>i</sub>P<sub>i</sub>L<sub>j</sub>L<sub>j</sub>P<sub>j</sub>P<sub>j</sub>P<sub>j</sub>W<sub>j</sub>1 ≤ N<sub>i</sub> ≤ 50,1 ≤ M ≤ 10<sup>4</sup>,1 ≤ W<sub>j</sub>(k) ≤ 10<sup>4</sup>。W<sub>1</sub>(4) + W<sub>2</sub>(4) = 5 + 15 = 20。W<sub>1</sub>(4)+W<sub>2</sub>(4)=5+15=20。 + +以下<span style="color:red">错误</span>的一项是? + +## aop + +### before + +```c +#include <bits/stdc++.h> +using namespace std; +``` + +### after + +```c + +``` + +## ç”案 + +```c +其他三个都ä¸å¯¹ +``` + +## 选项 + +### A + +```c +int main() +{ + vector<int> Hole(5); + int N, tmp, total = 0; + for (int i = 0; i < 6; ++i) + { + cin >> N; + for (int j = 0; j < N; ++j) + { + cin >> tmp; + ++Hole[tmp]; + ++total; + } + } + cin >> N; + vector<int> L(N + 1); + vector<vector<int>> W(N + 1, vector<int>()); + for (int i = 1; i <= N; ++i) + { + cin >> L[i]; + cin >> tmp; + W[i].resize(tmp + 1); + for (int j = 1; j <= tmp; ++j) + { + cin >> W[i][j]; + } + } + vector<vector<int>> dp(N + 1, vector<int>(total + 1)); + int sum = 0; + int kind = 0; + for (int level = 4; level >= 1; --level) + { + sum += Hole[level]; + if (sum == 0) + continue; + for (int k = 1; k <= N; ++k) + { + if (L[k] == level) + { + ++kind; + + for (int i = 1; i <= sum; ++i) + { + dp[kind][i] = dp[kind - 1][i]; + } + + for (int i = 1; i < W[k].size(); ++i) + { + for (int j = sum; j >= i; --j) + { + dp[kind][j] = max(dp[kind][j], dp[kind - 1][j - i] + W[k][i]); + } + } + } + } + } + cout << *max_element(dp[kind].begin(), dp[kind].end()) << endl; + return 0; +} +``` + +### B + +```c +int Solution() +{ + int n, sum = 0, L[5] = {0}, m, M, W[5][10] = {0}, le, P, res = 0; + for (int i = 0; i < 6; i++) + { + cin >> n; + sum += n; + for (int j = 0; j < n; j++) + { + cin >> m; + L[m]++; + } + } + cin >> M; + int ww; + for (int i = 0; i < M; i++) + { + cin >> le >> P; + for (int j = 1; j <= P; j++) + { + cin >> ww; + if (ww > W[le][j]) + W[le][j] = ww; + if ((j + 1 > P) && P < 7) + for (int k = j + 1; k <= 7; k++) + W[le][k] = W[le][k - 1]; + } + } + for (int i = 0; i <= L[4]; i++) + { + for (int j = 0; j <= (sum - L[1] - L[2] - i); j++) + { + for (int k = 0; k <= (sum - L[1] - (i + j)); k++) + { + for (int s = 0; s <= (sum - (i + j + k)); s++) + { + int a, b, c, d; + if (i > 7) + a = 7; + else + a = i; + if (j > 7) + b = 7; + else + b = j; + if (k > 7) + c = 7; + else + c = k; + if (s > 7) + d = 7; + else + d = s; + res = max(res, W[4][a] + W[3][b] + W[2][c] + W[1][d]); + } + } + } + } + return res; +} +int main() +{ + cout << Solution(); + return 0; +} + +``` + +### C + +```c +constexpr size_t MAXN = 55, MAXS = 305, MAXM = 1e4 + 5; +int n[MAXN], cnt[5], Lv[MAXM], p[MAXM], w[MAXM][MAXN]; +int dp[MAXM][MAXS]; +int m; + +inline void Read() +{ + ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); + for (int i = 1; i <= 6; i++) + { + cin >> n[i]; + for (int j = 1, x; j <= n[i]; j++) + { + cin >> x; + cnt[x]++; + } + } + cin >> m; + for (int i = 1; i <= m; i++) + { + cin >> Lv[i] >> p[i]; + for (int j = 1; j <= p[i]; j++) + cin >> w[i][j]; + } +} + +inline int DP() +{ + memset(dp, 0x80, sizeof dp), dp[0][0] = 0; + int ans = 0, sum = 0, tot = 0; + for (int L = 4; L >= 1; L--) + { + sum += cnt[L]; + for (int i = 1; i <= m; i++) + if (Lv[i] == L) + { + tot++; + for (int k = 0; k <= sum; k++) + dp[tot][k] = dp[tot - 1][k]; + for (int j = 1; j <= p[i]; j++) + for (int k = j; k <= sum; k++) + dp[tot][k] = max(dp[tot][k], dp[tot - 1][k - j] + w[i][j]); + } + } + for (int i = 0; i <= sum; i++) + ans = max(ans, dp[tot][i]); + return ans; +} + +signed main() +{ + Read(); + cout << DP(); +} + +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.json" index 27a3659cc..ed88b297e 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "3c3985435f414d7f9a8bbdcf42a42d46" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.md.md" new file mode 100644 index 000000000..498edf833 --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/5.\347\273\204\345\220\210\346\225\260\351\227\256\351\242\230/solution.md.md" @@ -0,0 +1,241 @@ +# 组åˆæ•°é—®é¢˜ + + +**问题æè¿°** + +ç»™ n, m, k, 求有多少对(i, j)满足 1 ≤ i ≤ n, 0 ≤ j ≤ min(i, m) 且C<sub>i</sub><sup>j</sup>≡0(mod k),k 是质数。其ä¸C<sub>i</sub><sup>j</sup>C<sub>i</sub><sup>j</sup>是组åˆæ•°ï¼Œè¡¨ç¤ºä»Ž i 个ä¸åŒçš„æ•°ä¸é€‰å‡º j 个组æˆä¸€ä¸ªé›†åˆçš„方案数。 + +**è¾“å…¥æ ¼å¼** + +第一行两个数 t, kï¼Œå…¶ä¸ t ä»£è¡¨è¯¥æµ‹è¯•ç‚¹åŒ…å« t 组询问,k çš„æ„æ€ä¸Žä¸Šæ–‡ä¸ç›¸åŒã€‚ + +æŽ¥ä¸‹æ¥ t è¡Œæ¯è¡Œä¸¤ä¸ªæ•´æ•° n, m,表示一组询问。 + +**è¾“å‡ºæ ¼å¼** + +输出 t 行,æ¯è¡Œä¸€ä¸ªæ•´æ•°è¡¨ç¤ºå¯¹åº”çš„ç”案。由于ç”案å¯èƒ½å¾ˆå¤§ï¼Œè¯·è¾“出ç”案除以 109 + 7 的余数。 + +**æ ·ä¾‹è¾“å…¥** + +``` +1 2 +3 3 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +1 +``` + +**æ ·ä¾‹è¯´æ˜Ž** + +在所有å¯èƒ½çš„情况ä¸ï¼Œåªæœ‰ C<sub>i</sub><sup>j</sup>C<sub>i</sub><sup>j</sup>C<sub>2</sub><sup>1</sup> 是 2 çš„å€æ•°ã€‚ + +**æ ·ä¾‹è¾“å…¥** + +``` +2 5 +4 5 +6 7 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +0 +7 +``` + +**æ ·ä¾‹è¾“å…¥** + +``` +3 23 +23333333 23333333 +233333333 233333333 +2333333333 2333333333 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +851883128 +959557926 +680723120 +``` + +**æ•°æ®è§„模和约定** + +``` +对于所有评测用例,1 ≤ k ≤ 108, 1 ≤ t ≤ 105, 1 ≤ n, m ≤ 1018,且 k 是质数。评测时将使用 10 ä¸ªè¯„æµ‹ç”¨ä¾‹æµ‹è¯•ä½ çš„ç¨‹åº +``` + +以下选项<span style="color:red">错误</span>的是? + + +## ç”案 + +```c +其他三项都是错的 +``` + +## 选项 + +### A + +```c +const int Mod = 1e9 + 7; +int c[2010][2010]; +int main() +{ + int n, m, t, k; + cin >> t >> k; + int nn = 2000, mm = 2000; + for (int i = 0; i <= nn; i++) + { + c[i][0] = 1; + c[i][i] = 1; + } + for (int i = 1; i <= nn; i++) + for (int j = 1; j <= mm; j++) + c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % k; + while (t--) + { + cin >> n >> m; + int ans = 0; + for (int j = 0; j <= m; j++) + for (int i = j; i <= n; i++) + if (c[i][j] == 0) + ans++; + cout << ans % Mod; + } + return 0; +} +``` + +### B + +```c +#define modk(x) (((x) >= k) ? ((x)-k) : (x)) +const int maxn = 2005; +int c[maxn][maxn], n, m, k, T; +void init() +{ + + c[0][0] = 1; + for (int i = 1; i < maxn; i++) + { + c[i][0] = 1 % k; + for (int j = 1; j <= i; j++) + { + c[i][j] = modk(c[i - 1][j] + c[i - 1][j - 1]); + } + } + + for (int i = 0; i < maxn; i++) + { + for (int j = 0; j <= i; j++) + { + if (c[i][j] == 0) + c[i][j] = 1; + else + c[i][j] = 0; + } + } + + for (int i = 1; i < maxn; i++) + { + int s = 0; + for (int j = 0; j < maxn; j++) + { + s += c[i][j]; + c[i][j] = c[i - 1][j] + s; + } + } +} +int main() +{ + scanf("%d%d", &T, &k); + init(); + while (T--) + { + scanf("%d%d", &n, &m); + printf("%d\n", c[n][m]); + } + return 0; +} +``` + +### C + +```c +const int Mod = 1e9 + 7; +const int inv_2 = 5e8 + 4; + +long long cal(long long x, long long y) +{ + if (x < y) + { + x %= Mod; + return (x + 2) * (x + 1) % Mod * inv_2 % Mod; + } + x %= Mod, y %= Mod; + return ((y + 2) * (y + 1) % Mod * inv_2 % Mod + (x - y) * (y + 1) % Mod) % Mod; +} +long long cal_1(long long x, long long y) +{ + return min(x, y) + 1; +} +long long cal_2(long long x, long long y) +{ + if (x < y) + { + return 0; + } + return x - y + 1; +} + +int main() +{ + int t, k; + cin >> t >> k; + long long n, m; + int a[100], b[100]; + for (int turn = 0; turn < t; ++turn) + { + cin >> n >> m; + if (m > n) + m = n; + long long ans = cal(n, m); + int len_a = 0, len_b = 0; + while (n) + { + a[len_a++] = n % k; + n /= k; + } + while (m) + { + b[len_b++] = m % k; + m /= k; + } + int len = max(len_a, len_b); + vector<vector<long long>> dp(len + 1, vector<long long>(4)); + dp[len][3] = 1; + for (int i = len - 1; i >= 0; --i) + { + dp[i][0] = dp[i + 1][0] * cal(k - 1, k - 1) + dp[i + 1][1] * cal(a[i] - 1, k - 1) + dp[i + 1][2] * cal(k - 1, b[i] - 1) + dp[i + 1][3] * cal(a[i] - 1, b[i] - 1); + dp[i][1] = dp[i + 1][1] * cal_1(a[i], k - 1) + dp[i + 1][3] * cal_1(a[i], b[i] - 1); + dp[i][2] = dp[i + 1][2] * cal_2(k - 1, b[i]) + dp[i + 1][3] * cal_2(a[i] - 1, b[i]); + dp[i][3] = dp[i + 1][3] & (a[i] >= b[i]); + dp[i][0] %= Mod, dp[i][1] %= Mod; + dp[i][2] %= Mod, dp[i][3] %= Mod; + } + ans -= dp[0][0] + dp[0][1] + dp[0][2] + dp[0][3]; + ans %= Mod; + if (ans < 0) + ans += Mod; + cout << ans << endl; + } + return 0; +} +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.json" index 0c85f4f43..e4c5c06c4 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "3c7880dd590c4f7cbe182c2c00af0e5a" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.md.md" new file mode 100644 index 000000000..36b48f9cb --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/6.\347\263\226\346\236\234/solution.md.md" @@ -0,0 +1,243 @@ +# ç³–æžœ + +糖果店的è€æ¿ä¸€å…±æœ‰Mç§å£å‘³çš„糖果出售。为了方便æ述,我们将Mç§å£å‘³ç¼–å·1~M。 + +å°æ˜Žå¸Œæœ›èƒ½å“å°åˆ°æ‰€æœ‰å£å‘³çš„糖果。é—憾的是è€æ¿å¹¶ä¸å•ç‹¬å‡ºå”®ç³–果,而是K颗一包整包出售。 + +幸好糖果包装上注明了其ä¸K颗糖果的å£å‘³ï¼Œæ‰€ä»¥å°æ˜Žå¯ä»¥åœ¨ä¹°ä¹‹å‰å°±çŸ¥é“æ¯åŒ…内的糖果å£å‘³ã€‚ + +ç»™å®šåŒ…ç³–æžœï¼Œè¯·ä½ è®¡ç®—å°æ˜Žæœ€å°‘ä¹°å‡ åŒ…ï¼Œå°±å¯ä»¥å“å°åˆ°æ‰€æœ‰å£å‘³çš„糖果。 + +**输入** + +第一行包å«ä¸‰ä¸ªæ•´æ•°Nã€M å’ŒK。 + +接下æ¥N è¡Œæ¯è¡ŒK 这整数T<sub>1</sub>,T<sub>2</sub>,…,T<sub>K</sub>,代表一包糖果的å£å‘³ã€‚ + +1<=N<=100,1<=M<=20,1<=K<=20,1<=T<sub>1</sub>,T<sub>2</sub>,…,T<sub>K</sub>T<sub>i</sub><=M。 + +**输出** + +一个整数表示ç”案。如果å°æ˜Žæ— 法å“å°æ‰€æœ‰å£å‘³ï¼Œè¾“出-1。 + + +**æ ·ä¾‹è¾“å…¥** + +``` +6 5 3 +1 1 2 +1 2 3 +1 1 3 +2 3 5 +5 4 2 +5 1 2 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +2 +``` + +以下<span style="color:red">错误</span>的一项是? + +## aop + +### before + +```c +#include <bits/stdc++.h> +using namespace std; +``` + +### after + +```c + +``` + +## ç”案 + +```c +const int N = 105, M = (1 << 20) + 10; +int n, m, k, x, a[N], dp[M]; + +int main() +{ + ios::sync_with_stdio(false); + cin >> n >> m >> k; + memset(dp, -1, sizeof(dp)); + for (int i = 1; i <= n; i++) + { + int s = 0; + for (int j = 1; j <= k; j++) + { + cin >> x; + s |= (1 << (x - 1)); + } + dp[s] = 1; + a[i] = s; + } + for (int i = 1; i <= n; i++) + { + for (int j = 0; j < (1 << m); j++) + { + if (dp[j] == -1) + continue; + int to = j | a[i]; + if (dp[to] != -1) + { + dp[to] = min(dp[to], dp[j]); + } + else + { + dp[to] = dp[j] + 1; + } + } + } + printf("%d\n", dp[(1 << m) - 1]); + return 0; +} +``` + +## 选项 + +### A + +```c +int n, m, k; +int dp[1 << 20]; +vector<int> a; + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + cin >> n >> m >> k; + for (int i = 0; i < (1 << m); i++) + { + dp[i] = 9999; + } + for (int i = 0; i < n; i++) + { + int s = 0; + for (int i = 0; i < k; i++) + { + int temp; + cin >> temp; + s |= 1 << (temp - 1); + } + a.push_back(s); + } + dp[0] = 0; + for (int i = 0; i < n; i++) + { + for (int j = 0; j < (1 << m); j++) + { + if (dp[j] == 9999 || (j | a[i]) == j) + continue; + dp[j | a[i]] = min(dp[j] + 1, dp[j | a[i]]); + } + } + if (dp[(1 << m) - 1] == 9999) + cout << -1; + else + cout << dp[(1 << m) - 1]; + return 0; +} +``` + +### B + +```c +const int maxn = (1 << 20) + 52; +const int inf = 9; +int a[505], n, m, k, dp[2][maxn]; +int min(int a, int b, int c) +{ + return min(min(a, b), c); +} +int main() +{ + scanf("%d%d%d", &n, &m, &k); + int e = 1 << m; + + for (int i = 1; i <= n; i++) + { + a[i] = 0; + for (int j = 0; j < k; j++) + { + int temp; + scanf("%d", &temp); + a[i] = a[i] | 1 << (temp - 1); + } + } + + for (int i = 0; i < maxn; i++) + { + dp[0][i] = dp[1][i] = inf; + } + dp[0][0] = 0; + + bool pos = 1; + for (int i = 1; i <= n; i++, pos = !pos) + { + for (int j = 0; j < e; j++) + { + dp[pos][j] = dp[!pos][j]; + } + for (int j = 0; j < e; j++) + { + dp[pos][j | a[i]] = min(dp[pos][j | a[i]], dp[!pos][j | a[i]], dp[!pos][j] + 1); + } + } + + if (dp[!pos][e - 1] == inf) + { + printf("-1\n"); + } + else + printf("%d\n", dp[!pos][e - 1]); + return 0; +} +``` + +### C + +```c +int dp[1 << 20]; +int ST[100]; +int main() +{ + int n, m, k; + cin >> n >> m >> k; + int tot = (1 << m) - 1; + memset(dp, -1, sizeof dp); + for (int i = 0; i < n; i++) + { + int st = 0; + for (int j = 0; j < k; j++) + { + int x; + cin >> x; + st |= (1 << x - 1); + } + dp[st] = 1; + ST[i] = st; + } + for (int i = 0; i <= tot; i++) + { + if (dp[i] != -1) + { + for (int j = 0; j < n; j++) + { + int st = ST[j]; + if (dp[i | st] == -1 || dp[i | st] > dp[i] + 1) + dp[i | st] = dp[i] + 1; + } + } + } + cout << dp[tot]; + return 0; +} +``` diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.json" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.json" index 7e6bb1047..3c2a26103 100644 --- "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.json" +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.json" @@ -1,6 +1,6 @@ { "type": "code_options", "author": "CSDN.net", - "source": "solution.md", + "source": "solution.md.md", "exercise_id": "6b4b68a3ead544a2a9640d9ca6f008b1" } \ No newline at end of file diff --git "a/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.md.md" "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.md.md" new file mode 100644 index 000000000..14bf8bd07 --- /dev/null +++ "b/data/1.\347\256\227\346\263\225\345\210\235\351\230\266/7.\350\223\235\346\241\245\346\235\257-\345\212\250\346\200\201\350\247\204\345\210\222/8.\345\236\222\351\252\260\345\255\220/solution.md.md" @@ -0,0 +1,416 @@ +# 垒骰å + +赌圣atm晚年迷æ‹ä¸Šäº†åž’骰å,就是把骰å一个垒在å¦ä¸€ä¸ªä¸Šè¾¹ï¼Œä¸èƒ½æªæªæ‰æ‰ï¼Œè¦åž’æˆæ–¹æŸ±ä½“。 + +ç»è¿‡é•¿æœŸè§‚察,atm å‘现了稳定骰å的奥秘:有些数å—çš„é¢è´´ç€ä¼šäº’ç›¸æŽ’æ–¥ï¼ + +我们先æ¥è§„范一下骰å:1 的对é¢æ˜¯ 4,2 的对é¢æ˜¯ 5,3 的对é¢æ˜¯ 6。 + +å‡è®¾æœ‰ m 组互斥现象,æ¯ç»„ä¸çš„那两个数å—çš„é¢ç´§è´´åœ¨ä¸€èµ·ï¼Œéª°åå°±ä¸èƒ½ç¨³å®šçš„åž’èµ·æ¥ã€‚ + +atm想计算一下有多少ç§ä¸åŒçš„å¯èƒ½çš„垒骰åæ–¹å¼ã€‚ + +两ç§åž’骰åæ–¹å¼ç›¸åŒï¼Œå½“且仅当这两ç§æ–¹å¼ä¸å¯¹åº”高度的骰å的对应数å—çš„æœå‘都相åŒã€‚ + +由于方案数å¯èƒ½è¿‡å¤šï¼Œè¯·è¾“出模 10<sup>9</sup> + 7 的结果。 + +ä¸è¦å°çœ‹äº† atm 的骰åæ•°é‡å“¦ï½ž + + +**è¾“å…¥æ ¼å¼** + +第一行两个整数 n m + +n表示骰åæ•°ç›® + +æŽ¥ä¸‹æ¥ m 行,æ¯è¡Œä¸¤ä¸ªæ•´æ•° a b ,表示 a å’Œ b æ•°å—ä¸èƒ½ç´§è´´åœ¨ä¸€èµ·ã€‚ + + +**è¾“å‡ºæ ¼å¼** + +一行一个数,表示ç”案模 10<sup>9</sup> + 710<sup>9</sup> + 7 的结果。 + + +**æ ·ä¾‹è¾“å…¥** + +``` +2 1 +1 2 +``` + +**æ ·ä¾‹è¾“å‡º** + +``` +544 +``` + + +**æ•°æ®èŒƒå›´** + +``` +对于 30% çš„æ•°æ®ï¼šn <= 5 +对于 60% çš„æ•°æ®ï¼šn <= 100 +对于 100% çš„æ•°æ®ï¼š0 < n <= 10^9, m <= 36 +``` + + +**资æºçº¦å®šï¼š** + +峰值内å˜æ¶ˆè€— < 256M +CPU消耗 < 2000ms + + +以下选项<span style="color:red">错误</span>的是? + +## aop + +### before + +```c +#include <bits/stdc++.h> +using namespace std; +``` + +### after + +```c + +``` + +## ç”案 + +```c +#define MOD 1000000007 +using namespace std; + +int points[7] = {0, 4, 5, 6, 1, 2, 3}; +int n, m; +int ban[36][2]; +long long result; + +bool judge(int point1, int point2) +{ + bool flag = true; + for (int i = 0; i < m; i++) + { + int point3 = points[point2]; + if (point1 == ban[i][0] && point3 == ban[i][1]) + { + + flag = false; + break; + } + if (point1 == ban[i][1] && point3 == ban[i][0]) + { + + flag = false; + break; + } + } + return flag; +} + +void dfs(int cnt, int point) +{ + if (cnt == n) + { + result++; + return; + } + for (int i = 1; i <= 6; i++) + { + if (judge(point, i)) + { + cnt++; + dfs(cnt, i); + cnt--; + } + } +} + +long long quickpow(int x, int N) +{ + int reg = x; + int sum = 1; + while (N) + { + if (N & 1) + { + sum = sum * reg; + } + reg *= reg; + N = N >> 1; + } + return sum; +} +int main() +{ + + cin >> n >> m; + for (int i = 0; i < m; i++) + { + cin >> ban[i][0] >> ban[i][1]; + } + dfs(0, 0); + + long long temp = quickpow(4, n); + cout << result * temp % MOD; + return 0; +} +``` + +## 选项 + +### A + +```c +#define MOD 1000000007 + +typedef long long LL; +LL dp[2][7]; +int n, m; +bool conflict[7][7]; +map<int, int> op; + +void init() +{ + op[1] = 4; + op[4] = 1; + op[2] = 5; + op[5] = 2; + op[3] = 6; + op[6] = 3; +} + +struct M +{ + LL a[6][6]; + + M() + { + for (int i = 0; i < 6; ++i) + { + for (int j = 0; j < 6; ++j) + { + a[i][j] = 1; + } + } + } +}; + +M mMultiply(M m1, M m2) +{ + M ans; + + for (int i = 0; i < 6; ++i) + { + for (int j = 0; j < 6; ++j) + { + ans.a[i][j] = 0; + for (int k = 0; k < 6; ++k) + { + ans.a[i][j] = (ans.a[i][j] + m1.a[i][k] * m2.a[k][j]) % MOD; + } + } + } + return ans; +} + +M mPow(M m, int k) +{ + M ans; + for (int i = 0; i < 6; ++i) + { + for (int j = 0; j < 6; ++j) + { + if (i == j) + ans.a[i][j] = 1; + else + ans.a[i][j] = 0; + } + } + while (k) + { + if (k & 1) + { + ans = mMultiply(ans, m); + } + m = mMultiply(m, m); + k >>= 1; + } + return ans; +} + +int main() +{ + init(); + scanf("%d%d", &n, &m); + M cMatrix; + for (int i = 0; i < m; ++i) + { + int a, b; + scanf("%d%d", &a, &b); + cMatrix.a[op[a] - 1][b - 1] = 0; + cMatrix.a[op[b] - 1][a - 1] = 0; + } + + M cMatrix_n_1 = mPow(cMatrix, n - 1); + + LL ans = 0; + for (int j = 0; j < 6; ++j) + { + for (int i = 0; i < 6; ++i) + { + ans = (ans + cMatrix_n_1.a[i][j]) % MOD; + } + } + + LL t = 1; + LL tmp = 4; + LL p = n; + while (p) + { + if (p & 1) + { + t = t * tmp % MOD; + } + tmp = tmp * tmp % MOD; + p >>= 1; + } + printf("%lld", ans * t % MOD); + + return 0; +} +``` + +### B + +```c +#define MOD 1000000007 + +typedef long long LL; +LL dp[2][7]; +int n, m; +bool conflict[7][7]; +map<int, int> op; + +void init() +{ + op[1] = 4; + op[4] = 1; + op[2] = 5; + op[5] = 2; + op[3] = 6; + op[6] = 3; +} + +int main() +{ + init(); + scanf("%d%d", &n, &m); + for (int i = 0; i < m; ++i) + { + int a, b; + scanf("%d%d", &a, &b); + conflict[a][b] = true; + conflict[b][a] = true; + } + + for (int j = 1; j <= 6; ++j) + { + dp[0][j] = 1; + } + + int cur = 0; + + for (int level = 2; level <= n; ++level) + { + cur = 1 - cur; + + for (int j = 1; j <= 6; ++j) + { + dp[cur][j] = 0; + + for (int i = 1; i <= 6; ++i) + { + if (conflict[op[j]][i]) + continue; + dp[cur][j] = (dp[cur][j] + dp[1 - cur][i]) % MOD; + } + } + } + + LL sum = 0; + for (int k = 1; k <= 6; ++k) + { + sum = (sum + dp[cur][k]) % MOD; + } + + LL ans = 1; + LL tmp = 4; + LL p = n; + + while (p) + { + if (p & 1) + ans = (ans * tmp) % MOD; + tmp = (tmp * tmp) % MOD; + p >>= 1; + } + printf("%lld\n", (sum * ans) % MOD); + return 0; +} +``` + +### C + +```c +#define MOD 1000000007 + +int op[7]; +bool confilct[7][7]; +void init() +{ + op[1] = 4; + op[4] = 1; + op[2] = 5; + op[5] = 2; + op[3] = 6; + op[6] = 3; +} +int n, m; + +long long int f(int up, int count) +{ + if (count == 0) + return 4; + long long ans = 0; + for (int upp = 1; upp <= 6; ++upp) + { + if (confilct[op[up]][upp]) + continue; + ans = (ans + f(upp, count - 1)) % MOD; + } + return ans; +} + +int main() +{ + init(); + scanf("%d%d", &n, &m); + for (int i = 0; i < m; ++i) + { + int x, y; + scanf("%d%d", &x, &y); + confilct[y][x] = true; + confilct[x][y] = true; + } + long long ans = 0; + for (int up = 1; up <= 6; ++up) + { + ans = (ans + 4 * f(up, n - 1)) % MOD; + } + printf("%lli\n", ans); + return 0; +} +``` diff --git a/main.py b/main.py index cb887a8f2..11e4a8a4e 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,9 @@ from src.tree import TreeWalker +from src.math import MathWalker if __name__ == '__main__': walker = TreeWalker("data", "algorithm", "Algorithm") walker.walk() + + math = MathWalker('data') + math.walk() diff --git a/src/math.py b/src/math.py new file mode 100644 index 000000000..5c9b42845 --- /dev/null +++ b/src/math.py @@ -0,0 +1,107 @@ +import os +import re + +from .tree import load_json, dump_json + + +def load_md(p): + with open(p, 'r', encoding='utf-8') as f: + return f.read() + + +def dump_md(p, str): + with open(p, 'w', encoding='utf-8') as f: + return f.write(str) + + +class MathWalker: + def __init__(self, root) -> None: + self.root = root + + def walk(self): + for base, dirs, files in os.walk(self.root): + config_path = os.path.join(base, 'config.json') + if os.path.exists(config_path): + config = load_json(config_path) + if config.get('export') is not None: + self.parse_math(base, config) + + def parse_math(self, base, config): + for export in config['export']: + export_path = os.path.join(base, export) + export_obj = load_json(export_path) + source_path = os.path.join(base, export_obj['source']) + md = load_md(source_path) + new_md = [] + math_ctx = { + "enter": False, + "chars": [] + } + + count = len(md) + i = 0 + has_enter_math = False + while i < count: + c = md[i] + if c == '$': + if math_ctx['enter']: + j = 0 + chars = math_ctx['chars'] + length = len(chars) + while j < length: + cc = chars[j] + if cc == '_': + next_c = chars[j+1] + if next_c == '{': + subs = [] + cursor = 2 + next_c = chars[j+cursor] + while next_c != '}': + subs.append(next_c) + cursor += 1 + next_c = chars[j+cursor] + + sub = ''.join(subs) + new_md.append(f'<sub>{sub}</sub>') + j += cursor + else: + new_md.append(f'<sub>{next_c}</sub>') + j += 1 + elif cc == '^': + next_c = chars[j+1] + if next_c == '{': + subs = [] + cursor = 2 + next_c = chars[j+cursor] + while next_c != '}': + subs.append(next_c) + cursor += 1 + next_c = chars[j+cursor] + + sub = ''.join(subs) + new_md.append(f'<sup>{sub}</sup>') + j += cursor + else: + new_md.append(f'<sup>{next_c}</sup>') + j += 1 + else: + new_md.append(cc) + j += 1 + + math_ctx['enter'] = False + else: + math_ctx['enter'] = True + has_enter_math = True + else: + if math_ctx['enter']: + math_ctx['chars'].append(c) + else: + new_md.append(c) + i += 1 + + source_new_relative = export_obj['source']+".md" + source_path_new = os.path.join(base, source_new_relative) + if has_enter_math: + dump_md(source_path_new, ''.join(new_md)) + export_obj['source'] = source_new_relative + dump_json(export_path, export_obj, True, True) -- GitLab