├── .gitignore ├── LICENSE ├── README.md ├── codeforces ├── README.md ├── Round579-Div.3 │ ├── A.cc │ ├── B.cc │ ├── C.cc │ ├── D.cc │ ├── E.cc │ └── README.md └── Round582-Div.3 │ ├── A.cc │ ├── B.cc │ ├── C.cc │ ├── D-solution2.cc │ ├── D.cc │ ├── E.cc │ ├── G.cc │ └── README.md ├── kuangbin专题 ├── README.md ├── 专题一_简单搜索 │ ├── HDU-2612.cc │ ├── POJ-1321.cc │ ├── POJ-1426.cc │ ├── POJ-2251.cc │ ├── POJ-3087.cc │ ├── POJ-3278.cc │ ├── POJ-3279.cc │ └── POJ-3414.cc ├── 专题五_并查集 │ ├── HDU-1213.cc │ ├── HDU-1272.cc │ ├── HDU-3038.cc │ ├── POJ-1182.cc │ ├── POJ-1308.cc │ ├── POJ-1456-wa.cc │ ├── POJ-1456.cc │ ├── POJ-1611-tle.cc │ ├── POJ-1611.cc │ ├── POJ-1733.cc │ ├── POJ-2236.cc │ ├── README.md │ └── ZOJ-3261.cc ├── 专题六_最小生成树 │ ├── HDU-1233.cc │ ├── HDU-1875.cc │ ├── POJ-1251.cc │ ├── POJ-1258.cc │ ├── POJ-1287.cc │ ├── POJ-1679.cc │ ├── POJ-1751.cc │ ├── POJ-1789.cc │ ├── POJ-2031.cc │ ├── POJ-2349.cc │ ├── POJ-2421.cc │ ├── POJ-3026.cc │ └── README.md └── 专题十二_基础DP │ └── README.md ├── vimrc ├── vimrc.md ├── 动态规划 ├── 51Nod-2602-dfs.cc ├── 51Nod-2602.cc ├── CF509A.cc ├── CodeForces-149D.cc ├── HDU-1024.cc ├── HDU-1074.cc ├── HDU-1078.cc ├── HDU-1087.cc ├── HDU-1114.cc ├── HDU-1160.cc ├── HDU-1176.cc ├── HDU-1257.cc ├── HDU-1260.cc ├── HDU-2191-correct1.cc ├── HDU-2191-correct2.cc ├── HDU-2191-correct3.cc ├── HDU-2191-error.cc ├── HDU-2196-dp.cc ├── HDU-2196.cc ├── HDU-2476-solution2.cc ├── HDU-2476.cc ├── HDU-2859.cc ├── HYSBZ-4247-wa.cc ├── HYSBZ-4247-wa2.cc ├── HYSBZ-4247.cc ├── P1115.cc ├── P1140.cc ├── P1244.cc ├── P1387.cc ├── P1435.cc ├── P1481.cc ├── P1507.cc ├── P1564-solution2.cc ├── P1564.cc ├── P1569-2.cc ├── P1569.cc ├── P1681.cc ├── P1719-solution2.cc ├── P1719.cc ├── P1734.cc ├── P1736-MLE.cc ├── P1736.cc ├── P1757.cc ├── P1802.cc ├── P1853-solution2.cc ├── P1853.cc ├── P1880.cc ├── P2008.cc ├── P2426.cc ├── P2430.cc ├── P2623.cc ├── P2663.cc ├── P2679.cc ├── P4170.cc ├── POJ-1014.cc ├── POJ-1015.cc ├── POJ-1065.cc ├── POJ-1458.cc ├── POJ-1631.cc ├── POJ-1655.cc ├── POJ-1661.cc ├── POJ-1664.cc ├── POJ-1742-memoryExceeded.cc ├── POJ-1742.cc ├── POJ-2184-dp.cc ├── POJ-2184.cc ├── POJ-2229-timeout.cc ├── POJ-2229.cc ├── POJ-2342.cc ├── POJ-2385.cc ├── POJ-2392.cc ├── POJ-2533-nlogn.cc ├── POJ-2533.cc ├── POJ-2955.cc ├── POJ-3046-solution2.cc ├── POJ-3046.cc ├── POJ-3107-tle.cc ├── POJ-3107.cc ├── POJ-3176.cc ├── POJ-3181-wrong.cc ├── POJ-3181.cc ├── POJ-3186-tle.cc ├── POJ-3186.cc ├── POJ-3280.cc ├── POJ-3616.cc ├── POJ-3624.cc ├── POJ-3666.cc ├── POJ-3783.cc ├── README.md ├── UVA-10003.cc ├── UVA-1025.cc ├── UVA-10934.cc ├── UVA-11400.cc ├── UVA-11584-TimeLimitExceeded.cc ├── UVA-11584.cc ├── UVA-116.cc ├── UVA-1218.cc ├── UVA-12186.cc ├── UVA-1220.cc ├── UVA-1252.cc ├── UVA-12563.cc ├── UVA-1331.cc ├── UVA-1347.cc ├── UVA-1625-tle.cc ├── UVA-1625.cc ├── UVA-1626.cc ├── UVA-437.cc ├── data.in ├── data.out ├── gen.py └── std.cc ├── 图论 ├── README.md ├── 搜索 │ ├── AOJ-0033.cc │ ├── AOJ-0118.cc │ ├── Aizu-0121-solution2.cc │ ├── Aizu-0121.cc │ ├── Aizu-0525.cc │ ├── Aizu-0558.cc │ ├── P1363.cc │ ├── POJ-1979.cc │ ├── POJ-2718-tle.cc │ ├── POJ-2718.cc │ ├── POJ-3009-2.cc │ ├── POJ-3009.cc │ ├── POJ-3050.cc │ ├── POJ-3187.cc │ ├── POJ-3669.cc │ └── README.md └── 最小生成树+最短路 │ ├── Aizu-0189.cc │ ├── LightOJ-1074.cc │ ├── P1119.cc │ ├── P1144.cc │ ├── P1342.cc │ ├── P1576.cc │ ├── P1608.cc │ ├── P1629.cc │ ├── P3366-solution2.cc │ ├── P3366.cc │ ├── P3385.cc │ ├── P3905-solution2.cc │ ├── P3905.cc │ ├── P4779.cc │ ├── POJ-1502.cc │ ├── POJ-1511.cc │ ├── POJ-1797.cc │ ├── POJ-1860.cc │ ├── POJ-2240.cc │ ├── POJ-2253.cc │ ├── POJ-2387.cc │ ├── POJ-2502.cc │ ├── POJ-3159.cc │ ├── POJ-3255.cc │ ├── POJ-3259-solution.cc │ ├── POJ-3259.cc │ ├── POJ-3268.cc │ ├── POJ-3660.cc │ ├── POJ-3723.cc │ └── README.md ├── 字符串 ├── HDU-1251.cc ├── HDU-1686.cc ├── HDU-2222.cc ├── HDU-4821-hash-tle.cc ├── HDU-4821-hash.cc ├── HDU-4821-solution2-tle.cc ├── HDU-4821-tle.cc ├── P3370-hash.cc ├── P3370.cc ├── P3796.cc ├── P3808.cc ├── P5357-tle.cc ├── P5357.cc ├── POJ-3630-solution2.cc ├── POJ-3630.cc ├── README.md ├── SP7586.cc ├── UVA-10298.cc └── UVA-11475.cc ├── 常用技巧 ├── POJ-3061.cc ├── POJ-3122.cc ├── POJ-3276.cc ├── POJ-3320.cc └── README.md ├── 数学 ├── Aizu-0005.cc ├── Aizu-0009.cc ├── HDU-2669.cc ├── POJ-1006.cc ├── POJ-1118.cc ├── POJ-1995.cc ├── POJ-3070-solution2.cc ├── POJ-3070.cc ├── POJ-3126.cc ├── POJ-3150.cc ├── POJ-3233-tle.cc ├── POJ-3233-tle2.cc ├── POJ-3233.cc ├── POJ-3421.cc ├── POJ-3641.cc ├── POJ-3735.cc ├── README.md ├── UVA-10006.cc ├── UVA-10375-solution2.cc ├── UVA-10375.cc ├── UVA-10791.cc ├── UVA-11582.cc ├── UVA-11768.cc ├── UVA-12169.cc ├── UVA-12716.cc └── math.md ├── 洛谷 ├── NOI- │ └── CF808E.cc ├── README.md ├── 入门 │ ├── CF6A.cc │ ├── CF909A.cc │ ├── P1116.cc │ ├── P1138.cc │ ├── P1146.cc │ ├── P1150.cc │ ├── P1151.cc │ ├── P1152.cc │ ├── P1161.cc │ ├── P1179.cc │ ├── P1296.cc │ ├── P1304.cc │ ├── P1317.cc │ ├── P1319.cc │ ├── P1320.cc │ ├── P1321.cc │ ├── P1420.cc │ ├── P1482.cc │ ├── P1534.cc │ ├── P1548.cc │ ├── P1554.cc │ ├── P1567.cc │ ├── P1568.cc │ ├── P1597.cc │ ├── P1614.cc │ ├── P1634.cc │ ├── P1652.cc │ ├── P1664.cc │ ├── P1720.cc │ ├── P1765.cc │ ├── P1789.cc │ ├── P1830.cc │ ├── P1838.cc │ ├── P1851.cc │ ├── P1867.cc │ ├── P1876.cc │ ├── P1887.cc │ ├── P1888.cc │ ├── P1897.cc │ ├── P1909.cc │ ├── P1917.cc │ ├── P2006.cc │ ├── P2036.cc │ ├── P2043.cc │ ├── P2084.cc │ ├── P2181.cc │ ├── P2192.cc │ ├── P2241.cc │ ├── P2356.cc │ ├── P2393.cc │ ├── P2415.cc │ ├── P2524.cc │ ├── P2525.cc │ ├── P2550.cc │ ├── P2637.cc │ ├── P2651.cc │ ├── P2666.cc │ ├── P2669.cc │ ├── P2670.cc │ ├── P2676.cc │ ├── P2689.cc │ ├── P2705.cc │ ├── P2708.cc │ ├── P2788.cc │ ├── P2907.cc │ ├── P2911.cc │ ├── P2955.cc │ ├── P2956.cc │ ├── P3150.cc │ ├── P3717.cc │ ├── P3741.cc │ ├── P3742.cc │ ├── P3954.cc │ ├── P4325.cc │ ├── P4445.cc │ ├── P4702.cc │ ├── P5015.cc │ ├── P5082.cc │ ├── P5660.cc │ ├── cpp01.cc │ ├── cpp02.cc │ ├── cpp03.cc │ ├── cpp04.cc │ ├── cpp05.cc │ ├── cpp06.cc │ ├── cpp07.cc │ ├── cpp08.cc │ ├── cpp09.cc │ ├── cpp10.cc │ ├── cpp11.cc │ ├── cpp12.cc │ ├── cpp13.cc │ ├── cpp14.cc │ ├── cpp15.cc │ ├── cpp16.cc │ ├── cpp17.cc │ ├── cpp18.cc │ ├── cpp19.cc │ ├── cpp20.cc │ ├── cpp21.cc │ ├── cpp22.cc │ ├── cpp23.cc │ ├── cpp24.cc │ ├── cpp25.cc │ ├── cpp26.cc │ ├── cpp27.cc │ ├── cpp28.cc │ ├── cpp29.cc │ ├── cpp30.cc │ ├── cpp31.cc │ ├── cpp32.cc │ ├── cpp33.cc │ ├── cpp34.cc │ └── test.cc ├── 提高- │ ├── 644A.cc │ ├── 644B.cc │ ├── 644C.cc │ ├── 644D.cc │ ├── 644F.cc │ ├── CF387C.cc │ ├── CF449A.cc │ ├── CF451B.cc │ ├── CF559A.cc │ ├── CF701C.cc │ ├── CF808C.cc │ ├── CF808D.cc │ ├── CF810B.cc │ ├── CF910C-tle.cc │ ├── P1017.cc │ ├── P1019.cc │ ├── P1022.cc │ ├── P1057.cc │ ├── P1062.cc │ ├── P1077.cc │ ├── P1088.cc │ ├── P1106-solution2.cc │ ├── P1106.cc │ ├── P1122.cc │ ├── P1123.cc │ ├── P1154-tle.cc │ ├── P1154.cc │ ├── P1160.cc │ ├── P1194.cc │ ├── P1229.cc │ ├── P1440.cc │ ├── P1504.cc │ ├── P1658.cc │ ├── P1690.cc │ ├── P1750.cc │ ├── P1843.cc │ ├── P1874.cc │ ├── P1886.cc │ ├── P1901.cc │ ├── P1929.cc │ ├── P1970-solution2.cc │ ├── P1970-solution3.cc │ ├── P1970-solution4.cc │ ├── P1970.cc │ ├── P2028.cc │ ├── P2032.cc │ ├── P2240.cc │ ├── P2440.cc │ ├── P2661.cc │ ├── P2661_2.out │ ├── P2678.cc │ ├── P2777.cc │ ├── P2947.cc │ ├── P3379-RMQ.cc │ ├── P3379.cc │ ├── P3865-solution2.cc │ ├── P3865.cc │ ├── P4995.cc │ ├── data.in │ └── data.out ├── 提高 │ ├── .acw169.cc.swp │ ├── CF450A.cc │ ├── CF485C.cc │ ├── CF485D.cc │ ├── CF642A.cc │ ├── CF642B.cc │ ├── CF642C.cc │ ├── CF811C.cc │ ├── CFAlarm_Clock.cc │ ├── CFTernary_String.cc │ ├── HDU-1520.cc │ ├── HDU-1561-solution2.cc │ ├── HDU-1561.cc │ ├── HDU-2196.cc │ ├── HDU-3586.cc │ ├── HDU-3593-tle.cc │ ├── HDU-3593.cc │ ├── HDU-4607.cc │ ├── P1006.cc │ ├── P1018.py │ ├── P1714.cc │ ├── P1843.cc │ ├── P1982.cc │ ├── P1991.cc │ ├── P2014.cc │ ├── P2629.cc │ ├── P2863.cc │ ├── P4305.cc │ ├── P6023.cc │ ├── POJ-1159.cc │ ├── POJ-1192.cc │ ├── POJ-1742.cc │ ├── POJ-1985.cc │ ├── POJ-2411.cc │ ├── POJ-2976.cc │ ├── POJ-3045.cc │ ├── POJ-3076.cc │ ├── POJ-3104.cc │ ├── POJ-3111.cc │ ├── POJ-3258.cc │ ├── POJ-3273.cc │ ├── POJ-3486.cc │ ├── POJ-3977.cc │ ├── U53204.cc │ ├── U83355-tle.cc │ ├── UVA-10617.cc │ ├── UVA-437.cc │ ├── UVA12034.cc │ ├── acw128.cc │ ├── acw129.py │ ├── acw131.cc │ ├── acw135.cc │ ├── acw138.cc │ ├── acw150.cc │ ├── acw152.cc │ ├── acw164-solution2.cc │ ├── acw164.cc │ ├── acw165.cc │ ├── acw166.cc │ ├── acw167.cc │ ├── acw169.cc │ ├── acw170.cc │ ├── acw171.cc │ ├── acw172.cc │ ├── acw281.cc │ ├── acw89.cc │ ├── acw9.cc │ ├── acw90.cc │ ├── data.in │ ├── data.py │ ├── test.cc │ └── tmp2.cc ├── 普及- │ ├── AT907.cc │ ├── CF334B.cc │ ├── CF483C.cc │ ├── CF545D.cc │ ├── CF792A.cc │ ├── CF792B.cc │ ├── CF808B.cc │ ├── CF811B.cc │ ├── CF812A.cc │ ├── CF812B.cc │ ├── P1007.cc │ ├── P1011.cc │ ├── P1015.cc │ ├── P1042.cc │ ├── P1044.cc │ ├── P1060.cc │ ├── P1079.cc │ ├── P1094.cc │ ├── P1097.cc │ ├── P1100.cc │ ├── P1102.cc │ ├── P1104.cc │ ├── P1105.cc │ ├── P1109.cc │ ├── P1125.cc │ ├── P1130.cc │ ├── P1141.cc │ ├── P1143.cc │ ├── P1145.cc │ ├── P1157.cc │ ├── P1170.cc │ ├── P1223.cc │ ├── P1255.py │ ├── P1256.cc │ ├── P1308.cc │ ├── P1610.cc │ ├── P1628.cc │ ├── P1683.cc │ ├── P1803.cc │ ├── P1824.cc │ ├── P1847.cc │ ├── P1969.cc │ ├── P2372.cc │ ├── P3378.cc │ ├── P3817.cc │ ├── P4136.cc │ ├── P5019.cc │ ├── data.in │ └── data.out └── 省选- │ ├── CF787B.cc │ ├── CF792C.cc │ ├── CF792D.cc │ ├── CF812C.cc │ ├── CF845C.cc │ ├── HDU-2089.cc │ ├── HDU-3555.cc │ ├── HDU-3652.cc │ ├── HDU-5179.cc │ ├── HDU-5887-tle.cc │ ├── HDU-5887.cc │ ├── P1171.cc │ ├── P1273-solution2.cc │ ├── P1273-tle.cc │ ├── P1273-tle2.cc │ ├── P1273.cc │ ├── P1404.cc │ ├── P1462.cc │ ├── P1801-tle.cc │ ├── P1801.cc │ ├── P1823.cc │ ├── P2657-tle.cc │ ├── P2657.cc │ ├── P2704.cc │ ├── POJ-1155.cc │ ├── UVA1638.cc │ └── data.out └── 贪心 ├── HDU-1789.cc ├── POJ-1017.cc ├── POJ-1328.cc ├── POJ-1456-solution2.cc ├── POJ-1456.cc ├── POJ-1862.cc ├── POJ-2376.cc ├── POJ-2393-tle.cc ├── POJ-2393.cc ├── POJ-3040.cc ├── POJ-3190.cc ├── POJ-3262.cc ├── POJ-3614-wrong.cc ├── POJ-3614.cc └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | a.out 2 | tmp.cc 3 | datain.txt 4 | dataout.txt 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Algorithm-challenger 2 | ACM and OI general algorithm 3 | 4 | [vim配置](./vimrc.md) -------------------------------------------------------------------------------- /codeforces/README.md: -------------------------------------------------------------------------------- 1 | 这部分是cf的套题,可以用来辅助训练。 2 | 3 | 计划先写10套cf div.3。 -------------------------------------------------------------------------------- /codeforces/Round579-Div.3/A.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-14 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 2e2 + 5; 8 | int q, n; 9 | int A[maxn]; 10 | 11 | int main() { 12 | scanf("%d", &q); 13 | while(q--) { 14 | scanf("%d", &n); 15 | for(int i = 0; i < n; ++i) { 16 | scanf("%d", &A[i]); 17 | --A[i]; 18 | } 19 | bool is_ok1 = true, is_ok2 = true; 20 | for(int i = 0; i < n; ++i) { 21 | int next_index = (i + 1) % n; 22 | // clockwise, 升序 23 | if((A[i] + 1) % n != A[next_index]) is_ok1 = false; 24 | // counterclockwise, 降序 25 | if((A[next_index] + 1) % n != A[i]) is_ok2 = false; 26 | } 27 | if(is_ok1 || is_ok2) 28 | printf("YES\n"); 29 | else 30 | printf("NO\n"); 31 | } 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /codeforces/Round579-Div.3/C.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-14 3 | // 4 | 5 | #include 6 | 7 | int n; 8 | 9 | int main() { 10 | scanf("%d", &n); 11 | long long max_common_divisor; 12 | // 求出n个数的最大公约数 13 | for(int i = 1; i <= n; ++i) { 14 | long long tmp; 15 | scanf("%lld", &tmp); 16 | if(i == 1) 17 | max_common_divisor = tmp; 18 | else 19 | max_common_divisor = std::__gcd(max_common_divisor, tmp); 20 | } 21 | 22 | int ans = 0; 23 | for(int i = 1; i <= std::sqrt(max_common_divisor); ++i) { 24 | if(max_common_divisor % i == 0){ 25 | long long divisor = max_common_divisor / i; 26 | if(divisor * divisor == max_common_divisor) 27 | ++ans; 28 | else 29 | ans += 2; 30 | } 31 | } 32 | printf("%d", ans); 33 | return 0; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /codeforces/Round579-Div.3/E.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-14 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 2e5 + 5; 8 | int n; 9 | int A[maxn]; 10 | std::set st; 11 | 12 | int main() { 13 | scanf("%d", &n); 14 | for(int i = 1; i <= n; ++i) { 15 | scanf("%d", &A[i]); 16 | } 17 | std::sort(A + 1, A + 1 + n); 18 | for(int i = 1; i <= n; ++i) { 19 | if(i == 1) { 20 | st.insert(std::max(1, A[i] - 1)); 21 | } else { 22 | if(!st.count(A[i] - 1) && A[i] - 1 >= 1) { 23 | st.insert(A[i] - 1); 24 | } else if(!(st.count(A[i])) && A[i] >= 1) { 25 | st.insert(A[i]); 26 | } else if(!(st.count(A[i] + 1)) && A[i] + 1 >= 1) { 27 | st.insert(A[i] + 1); 28 | } 29 | } 30 | } 31 | printf("%d", (int)st.size()); 32 | return 0; 33 | } 34 | 35 | -------------------------------------------------------------------------------- /codeforces/Round582-Div.3/A.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-08 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e2 + 5; 8 | int n; 9 | int A[maxn]; 10 | int main(){ 11 | scanf("%d", &n); 12 | for(int i=1; i<=n; ++i){ 13 | scanf("%d", &A[i]); 14 | } 15 | // 枚举最后都移动到相同的点 16 | int ans = 1e9; 17 | for(int i=1; i<=n; ++i){ 18 | int sum = 0; 19 | for(int j=1; j<=n; ++j){ 20 | sum += std::abs(A[j]-A[i])%2; 21 | } 22 | ans = std::min(ans, sum); 23 | } 24 | printf("%d\n", ans); 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /codeforces/Round582-Div.3/B.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-08 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 2e5 + 5; 8 | int t,n; 9 | int A[maxn]; 10 | 11 | int main() { 12 | scanf("%d", &t); 13 | while(t--){ 14 | scanf("%d", &n); 15 | for(int i = 1; i <= n; ++i){ 16 | scanf("%d", &A[i]); 17 | } 18 | int ans = 0; 19 | int minV = 1e9; 20 | for(int i = n; i >= 1; --i){ 21 | if(A[i] > minV) 22 | ++ans; 23 | minV = std::min(minV, A[i]); 24 | } 25 | printf("%d\n", ans); 26 | } 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /codeforces/Round582-Div.3/C.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-10 3 | // 4 | 5 | #include 6 | long long q, n, m; 7 | std::vector vec; 8 | 9 | int main() { 10 | scanf("%lld", &q); 11 | while(q--) { 12 | scanf("%lld %lld", &n, &m); 13 | vec.clear(); 14 | // 记录一个循环节的和 15 | long long sum = 0; 16 | for(int i = 1; i <= 10; ++i) { 17 | vec.push_back(m*i%10); 18 | sum += m*i%10; 19 | } 20 | 21 | // 几个完整的循环节的和 22 | long long ans = n / m / 10 * sum; 23 | // 余下的一个循环节里剩下的元素求和 24 | for(int i = 0; i < n / m % 10; ++i) { 25 | ans += vec[i]; 26 | } 27 | printf("%lld\n", ans); 28 | } 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /codeforces/Round582-Div.3/D-solution2.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-11 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 2e5 + 5; 8 | int n, k; 9 | // vec[i]记录的是对应数变成i时,对应的操作数 10 | std::vector vec[maxn]; 11 | 12 | void preprocess(int x) { 13 | int cnt = 0; 14 | while(x) { 15 | vec[x].push_back(cnt); 16 | x /= 2; 17 | cnt++; 18 | } 19 | vec[0].push_back(cnt); 20 | } 21 | 22 | int main() { 23 | scanf("%d %d", &n, &k); 24 | for(int i = 1; i <= n; ++i) { 25 | int x; 26 | scanf("%d", &x); 27 | preprocess(x); 28 | } 29 | int ans = 1e9; 30 | // 枚举每个可能k个相等的数 31 | for(int i = 0; i <= 2e5; ++i) { 32 | if(vec[i].size() < k) continue; 33 | std::sort(vec[i].begin(), vec[i].end()); 34 | ans = std::min(ans, std::accumulate(vec[i].begin(), vec[i].begin() + k, 0)); 35 | } 36 | printf("%d", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /kuangbin专题/README.md: -------------------------------------------------------------------------------- 1 | ##### TODO: 2020年计划刷掉kuangbin的所有专题 2 | 3 | https://vjudge.net/article/752 4 | 5 | **Done**: 6 | 7 | - ~~专题一 简单搜索~~ 8 | - ~~专题六 最小生成树~~ 9 | - ~~专题十二 基础DP~~ 10 | 11 | -------------------------------------------------------------------------------- /kuangbin专题/专题一_简单搜索/POJ-1426.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-01 23:28:38 PM 5 | * File Name : POJ-1426.cc 6 | */ 7 | 8 | #include 9 | 10 | long long n, m; 11 | bool founded; 12 | void dfs(long long x, int depth) { 13 | if (depth >= 19 || founded) 14 | return ; 15 | if (x % n == 0) { 16 | m = x; 17 | founded = true; 18 | return ; 19 | } 20 | // x后面添0 21 | dfs(x * 10 + 0, depth + 1); 22 | // x后面添1 23 | dfs(x * 10 + 1, depth + 1); 24 | } 25 | int main() { 26 | while (scanf("%lld", &n) && n) { 27 | founded = false; 28 | dfs(1, 0); 29 | printf("%lld\n", m); 30 | } 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /kuangbin专题/专题五_并查集/POJ-1456-wa.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-12 00:39:32 AM 5 | * File Name : POJ-1456.cc 6 | */ 7 | 8 | //#include 9 | #include 10 | #include 11 | #include 12 | 13 | void debug() { 14 | #ifdef Acui 15 | freopen("data.in", "r", stdin); 16 | freopen("data.out", "w", stdout); 17 | #endif 18 | } 19 | 20 | const int N = 1e4 + 5; 21 | int n; 22 | int main() { 23 | while (scanf("%d", &n) != EOF) { 24 | std::vector A[N]; 25 | std::set st; 26 | for (int i = 1; i <= n; ++i) { 27 | int p, d; 28 | scanf("%d %d", &p, &d); 29 | if (A[d].size() == 0) 30 | A[d].push_back(p); 31 | else 32 | if (A[d][0] < p) 33 | A[d][0] = p; 34 | st.insert(d); 35 | } 36 | int ans = 0; 37 | for (std::set::iterator ite = st.begin(); ite != st.end(); ++ite) { 38 | int index = *ite; 39 | ans += A[index][0]; 40 | } 41 | printf("%d\n", ans); 42 | } 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /kuangbin专题/专题五_并查集/POJ-1733.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-12 00:26:46 AM 5 | * File Name : POJ-1733.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e9 + 7; 18 | int L, Q; 19 | int fa[N]; 20 | int main() { 21 | scanf("%d %d", &L, &Q); 22 | for (int i = 1; i <= Q; ++i) { 23 | int x, y; 24 | char str[7]; 25 | scanf("%d %d %s", &x, &y, str + 1); 26 | y += 1; 27 | 28 | bool e; 29 | if (str[1] == 'e') e = true; 30 | else e = false; 31 | int rt1 = find_union(x); 32 | int rt2 = find_union(y); 33 | if (rt1 != rt2) { 34 | fa[rt1] = rt2; 35 | b[rt1] = (-b[x] + e + b[y] + MOD) % MOD; 36 | } else { 37 | if (b[x] != (d + b[y] + MOD) % MOD) { 38 | printf("%d\n", i - 1); 39 | return 0; 40 | } 41 | } 42 | } 43 | printf("%d\n", Q); 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /kuangbin专题/专题六_最小生成树/README.md: -------------------------------------------------------------------------------- 1 | #### 简要概述 2 | 3 | - [POJ-1251](https://vjudge.net/problem/POJ-1251), 模板题 4 | - [POJ-1287](https://vjudge.net/problem/POJ-1287), 模板题 5 | - [POJ-2031](https://vjudge.net/problem/POJ-2031), 模板题 6 | - [POJ-2421](https://vjudge.net/problem/POJ-2421), 模板题 7 | - [POJ-1789](https://vjudge.net/problem/POJ-1789), 看出题目它其实是求最小生成树 8 | - [POJ-2349](https://vjudge.net/problem/POJ-2349), 好题, 有一定思维 9 | - [POJ-1751](https://vjudge.net/problem/POJ-1751), 好题 10 | - [POJ-1258](https://vjudge.net/problem/POJ-1258), 模板题 11 | - [POJ-3026](https://vjudge.net/problem/POJ-3026), 好题, 题目意思不好读懂. bfs建图, 然后跑最小生成树. 12 | - [POJ-1679](https://vjudge.net/problem/POJ-1679), 好题, 求次小生成树. 13 | - [HDU-1233](https://vjudge.net/problem/HDU-1233), 模板题 14 | - [HDU-1875](https://vjudge.net/problem/HDU-1875), 模板题 15 | 16 | --- 17 | 18 | -------------------------------------------------------------------------------- /kuangbin专题/专题十二_基础DP/README.md: -------------------------------------------------------------------------------- 1 | #### dp题都集中在这, [dp专题](https://github.com/OFShare/Algorithm-challenger/blob/master/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/README.md) 2 | 3 | -------------------------------------------------------------------------------- /vimrc.md: -------------------------------------------------------------------------------- 1 | ### vim简单配置 2 | 3 | - `sudo apt-get install vim-gnome` 4 | 5 | - `mv ./vimrc ~/.vimrc` 复制当前目录下的vimrc文件到你的~/.vimrc下 6 | - `Ctrl + D` 创建日期等信息 7 | - `Ctrl + E` 自动跳回终端编译并运行, ``中断运行跳回vim. 其中编译默认开启`-std=c++11` 8 | - `Ctrl + A` 调试好程序后, ``复制代码到粘贴板, 提交 -------------------------------------------------------------------------------- /动态规划/CF509A.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-10 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 10+5; 8 | int n; 9 | int A[maxn][maxn]; 10 | 11 | int main(){ 12 | scanf("%d",&n); 13 | for(int k=1;k<=n;++k){ 14 | A[k][1] = 1; 15 | A[1][k] = 1; 16 | } 17 | for(int i=2;i<=n;++i){ 18 | for(int j=2;j<=n;++j){ 19 | A[i][j] = A[i-1][j] + A[i][j-1]; 20 | } 21 | } 22 | int ans = 0; 23 | for(int i=1;i<=n;++i){ 24 | for(int j=1;j<=n;++j){ 25 | ans = std::max(ans, A[i][j]); 26 | } 27 | } 28 | printf("%d\n",ans); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /动态规划/HDU-1087.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-24 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e3 + 5; 8 | int n,A[maxn]; 9 | // dp[i]:以第i个元素结尾的最大和 10 | long long dp[maxn]; 11 | 12 | int main(){ 13 | while(scanf("%d",&n) && n){ 14 | for(int i=1;i<=n;++i){ 15 | scanf("%d", &A[i]); 16 | } 17 | for(int i=1;i<=n;++i){ 18 | // 初始化 19 | dp[i] = A[i]; 20 | for(int j=1;j 6 | 7 | const int INF = 1e9; 8 | const int maxn = 1e4 + 5; 9 | int T,E,F,n; 10 | // dp[i][j]:前i个物品,恰好装进背包容量为j时,所能获得的最小价值 11 | int dp[maxn/20][maxn]; 12 | 13 | int main(){ 14 | scanf("%d", &T); 15 | while(T--){ 16 | scanf("%d %d %d", &E, &F, &n); 17 | // 初始化 18 | std::fill(dp[0], dp[0]+maxn-2, INF); 19 | dp[0][0] = 0; 20 | 21 | for(int i=1;i<=n;++i){ 22 | int p,w; 23 | scanf("%d %d", &p, &w); 24 | for(int j=0;j<=F-E;++j){ 25 | // 不选 26 | dp[i][j] = dp[i-1][j]; 27 | // 选 28 | if(j-w >= 0) 29 | dp[i][j] = std::min(dp[i][j], dp[i][j-w] + p); 30 | } 31 | } 32 | if(dp[n][F-E] >= INF) 33 | printf("This is impossible.\n"); 34 | else 35 | printf("The minimum amount of money in the piggy-bank is %d.\n", dp[n][F-E]); 36 | } 37 | return 0; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /动态规划/HDU-1257.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-06 22:02:58 PM 5 | * File Name : HDU-1257.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int INF = 1e9; 18 | const int N = 1e3 + 5; 19 | int n; 20 | int dp[N]; 21 | 22 | int main() { 23 | while (scanf("%d", &n) != EOF) { 24 | std::memset(dp, 0x3f3f3f, sizeof dp); 25 | for (int i = 1; i <= n; ++i) { 26 | int x; 27 | scanf("%d", &x); 28 | *std::lower_bound(dp + 1, dp + 1 + n, x) = x; 29 | } 30 | printf("%d\n", std::lower_bound(dp + 1, dp + 1 + n, INF) - (dp + 1)); 31 | } 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /动态规划/P1115.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-15 3 | // 4 | 5 | #include 6 | 7 | int n; 8 | const int maxn = 2e5 + 5; 9 | // dp[i]: 前i个元素,且以第i个元素结尾的最大的连续子段和 10 | long long dp[maxn]; 11 | 12 | int main() { 13 | scanf("%d", &n); 14 | for(int i = 1; i <= n; ++i) { 15 | long long tmp; 16 | scanf("%lld", &tmp); 17 | // 第i个元素单独构成一段 18 | dp[i] = tmp; 19 | // 和前面的组合成一段 20 | dp[i] = std::max(dp[i], dp[i - 1] + tmp); 21 | } 22 | long long ans = -1e13; 23 | for(int i = 1; i <= n; ++i) { 24 | ans = std::max(ans, dp[i]); 25 | } 26 | printf("%lld\n", ans); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /动态规划/P1244.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-15 3 | // 4 | 5 | #include 6 | 7 | int h, k; 8 | 9 | int main() { 10 | scanf("%d %d", &h, &k); 11 | long long ans = k + 1; 12 | for(int i = 1; i <= h; ++i) { 13 | ans = ans * 2; 14 | } 15 | printf("%lld\n", ans); 16 | return 0; 17 | } 18 | -------------------------------------------------------------------------------- /动态规划/P1387.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-16 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e3 + 5; 8 | int n, m; 9 | // dp[i][j]: 当在右下角坐标为(i, j)时,不包含0时能构成的最大正方形的边长 10 | int dp[maxn][maxn]; 11 | int A[maxn][maxn]; 12 | 13 | int main() { 14 | scanf("%d %d", &n, &m); 15 | for(int i = 1; i <= n; ++i) { 16 | for(int j = 1; j <= m; ++j) { 17 | scanf("%d", &A[i][j]); 18 | } 19 | } 20 | int ans = 1; 21 | for(int i = 1; i <= n; ++i) { 22 | for(int j = 1; j <= m; ++j) { 23 | // 初始化 24 | dp[i][j] = 1; 25 | if(A[i][j] == 0) { 26 | dp[i][j] = 0; 27 | continue; 28 | } 29 | if(i - 1 >= 1 && j - 1 >= 1) 30 | dp[i][j] = std::min(dp[i - 1][j -1], std::min(dp[i][j - 1], dp[i - 1][j])) + 1; 31 | ans = std::max(ans, dp[i][j]); 32 | } 33 | } 34 | printf("%d", ans); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /动态规划/P1435.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-17 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e3 + 5; 8 | char A[maxn]; 9 | // dp[i][j]: i~j之间(含i, j)变成回文词最少的插入数 10 | int dp[maxn][maxn]; 11 | 12 | int dfs(int i, int j) { 13 | if(dp[i][j] != -1) 14 | return dp[i][j]; 15 | // 递归边界 16 | if(i == j || i > j) 17 | return 0; 18 | if(A[i] == A[j]) 19 | return dp[i][j] = dfs(i + 1, j - 1); 20 | else 21 | return dp[i][j] = std::min(dfs(i + 1, j), dfs(i, j - 1)) + 1; 22 | } 23 | 24 | int main() { 25 | scanf("%s", A + 1); 26 | std::memset(dp, -1, sizeof dp); 27 | printf("%d", dfs(1, strlen(A + 1))); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /动态规划/P1481.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-15 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 2e3 + 5; 8 | int n; 9 | std::string A[maxn]; 10 | // dp[i]:前i个元素,且以第i个元素结尾的最长词链 11 | int dp[maxn]; 12 | 13 | bool is_ok(int i, int j) { 14 | if(A[j].size() <= A[i].size()) { 15 | for(int k = 0; k < A[j].size(); ++k) { 16 | if(A[j][k] != A[i][k]) 17 | return false; 18 | } 19 | return true; 20 | } 21 | return false; 22 | } 23 | 24 | int main() { 25 | std::cin >> n; 26 | for(int i = 1; i <= n; ++i) { 27 | std::cin >> A[i]; 28 | } 29 | for(int i = 1; i <= n; ++i) { 30 | dp[i] = 1; 31 | for(int j = 1; j <= i - 1; ++j) { 32 | if(is_ok(i, j)) 33 | dp[i] = std::max(dp[i], dp[j] + 1); 34 | } 35 | } 36 | int ans = -1; 37 | for(int i = 1; i <= n; ++i) { 38 | ans = std::max(ans, dp[i]); 39 | } 40 | std::cout << ans << std::endl; 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /动态规划/P1507.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-24 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 4e2 + 5; 8 | int volume, weight, n; 9 | int dp[maxn/8][maxn][maxn]; 10 | 11 | int main(){ 12 | scanf("%d %d %d", &volume, &weight, &n); 13 | for(int i=1;i<=n;++i){ 14 | int v,w,calorie; 15 | scanf("%d %d %d", &v, &w, &calorie); 16 | for(int j=0;j<=volume;++j){ 17 | for(int k=0;k<=weight;++k){ 18 | // 不选 19 | dp[i][j][k] = dp[i-1][j][k]; 20 | // 选 21 | if(j-v >= 0 && k-w >= 0) 22 | dp[i][j][k] = std::max(dp[i][j][k], dp[i-1][j-v][k-w] + calorie); 23 | } 24 | } 25 | } 26 | printf("%d\n", dp[n][volume][weight]); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /动态规划/P1564-solution2.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-16 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 3e3 + 5; 8 | int n, m; 9 | int A[maxn]; 10 | // dp[i]: 前i个同学最少需要的机房数 11 | int dp[maxn]; 12 | // sum[i]: 记录前i个数的'差分前缀和' 13 | int sum[maxn]; 14 | 15 | int main() { 16 | scanf("%d %d",&n, &m); 17 | for(int i = 1; i <= n; ++i) { 18 | scanf("%d", &A[i]); 19 | if(A[i] == 1) sum[i] = sum[i - 1] + 1; 20 | if(A[i] == 2) sum[i] = sum[i - 1] + -1; 21 | } 22 | for(int i = 1; i <= n; ++i) { 23 | // 初始化 24 | dp[i] = 1e9; 25 | for(int j = 0; j < i; ++j) { 26 | if((i - (j + 1) + 1) == std::abs(sum[i] - sum[j]) || std::abs(sum[i] - sum[j]) <= m) { 27 | dp[i] = std::min(dp[i], dp[j] + 1); 28 | } 29 | } 30 | } 31 | printf("%d\n", dp[n]); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /动态规划/P1569-2.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-23 3 | // 4 | 5 | #include 6 | 7 | const int INF = 1e9; 8 | const int maxn = 1e3 + 5; 9 | int n; 10 | int A[maxn]; 11 | // dp[i]:前i个元素,最优分成几组 12 | int dp[maxn]; 13 | 14 | int main(){ 15 | scanf("%d", &n); 16 | for(int i=1;i<=n;++i){ 17 | scanf("%d", &A[i]); 18 | } 19 | std::fill(dp, dp+n, -INF); 20 | // 初始化 21 | dp[0] = 0; 22 | for(int i=1;i<=n;++i){ 23 | int sum = 0; 24 | for(int k=i;k>=1;--k){ 25 | sum += A[k]; 26 | if(sum >= 0) 27 | dp[i] = std::max(dp[i], dp[k-1] + 1); 28 | 29 | } 30 | } 31 | if(dp[n]>0) 32 | printf("%d\n",dp[n]); 33 | else 34 | printf("Impossible\n"); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /动态规划/P1569.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-23 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e3 + 5; 8 | int n; 9 | int A[maxn]; 10 | // dp[i][j]:前i个元素,能否组成j组 11 | // 因为第i个元素肯定会被分进某一组,状态转移就是第i个元素单独一组,还是和前面的一组拼接起来 12 | int dp[maxn][maxn]; 13 | 14 | int main(){ 15 | scanf("%d", &n); 16 | for(int i=1;i<=n;++i){ 17 | scanf("%d", &A[i]); 18 | } 19 | // 初始化 20 | dp[0][0] = 1; 21 | for(int i=1;i<=n;++i){ 22 | for(int j=0;j<=i;++j){ 23 | // 第i个元素单独组成一组 24 | if(A[i] >= 0) 25 | dp[i][j] |= dp[i-1][j]; 26 | // 第i个元素和前面组成一组 27 | int sum = 0; 28 | for(int k=i;k>=1;--k){ 29 | sum += A[k]; 30 | if(sum>=0) 31 | dp[i][j] |= dp[k-1][j-1]; 32 | if(dp[i][j]) 33 | break; 34 | } 35 | } 36 | } 37 | for(int j=n;j>=1;--j){ 38 | if(dp[n][j]) 39 | printf("%d\n",j), exit(0); 40 | } 41 | printf("Impossible\n"); 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /动态规划/P1734.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-15 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 1e3 + 5; 8 | int S; 9 | // sum[i]记录i的约数的和 10 | int sum[maxn]; 11 | // dp[i][j]: 前i个物品装进不超过背包容量为j的能获得的最大的价值 12 | int dp[maxn][maxn]; 13 | 14 | void precess() { 15 | for(int i = 1; i <= maxn; ++i) { 16 | sum[i] = 0; 17 | for(int j = 1; j <= std::sqrt(i); ++j) { 18 | if(i % j == 0) { 19 | if(j != i) 20 | sum[i] += j; 21 | if(i / j != i && i / j != j) 22 | sum[i] += i / j; 23 | } 24 | } 25 | } 26 | } 27 | 28 | int main() { 29 | scanf("%d", &S); 30 | precess(); 31 | for(int i = 1; i <= S; ++i) { 32 | for(int j = 0; j <= S; ++j) { 33 | // 不装第i个物品 34 | dp[i][j] = dp[i - 1][j]; 35 | // 装第i个物品 36 | if(j - i >= 0) 37 | dp[i][j] = std::max(dp[i][j], dp[i - 1][j - i] + sum[i]); 38 | } 39 | } 40 | printf("%d", dp[S][S]); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /动态规划/P1802.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-23 3 | // 4 | 5 | // https://www.luogu.org/problem/P1802 6 | #include 7 | 8 | const int maxn = 1e3 + 5; 9 | int n,x; 10 | // dp[i][j]:前i个人,使用不超过j瓶药,所能获得的最大经验 11 | long long dp[maxn][maxn]; 12 | 13 | int main(){ 14 | #ifdef OFShare 15 | std::freopen("datain.txt", "r", stdin); 16 | std::freopen("dataout.txt", "w", stdout); 17 | #endif 18 | scanf("%d %d", &n,&x); 19 | for(int i=1;i<=n;++i){ 20 | int lose, win, use; 21 | scanf("%d %d %d", &lose, &win, &use); 22 | for(int j=0;j<=x;++j){ 23 | // 不和第i个人打 24 | dp[i][j] = dp[i-1][j]; 25 | // 打:打的过,和打不过 26 | if(j-use>=0) 27 | dp[i][j] = std::max(dp[i][j], dp[i-1][j-use] + win); 28 | dp[i][j] = std::max(dp[i][j], dp[i-1][j] + lose); 29 | } 30 | } 31 | printf("%lld\n", dp[n][x] * 5); 32 | return 0; 33 | } 34 | 35 | -------------------------------------------------------------------------------- /动态规划/P1853-solution2.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Created by OFShare on 2019-09-18 3 | // 4 | 5 | #include 6 | 7 | const int maxn = 10 + 2; 8 | const int maxm = 1e7 + 5; 9 | int s, n, d; 10 | 11 | struct node { 12 | int a, b; 13 | }A[maxn]; 14 | // dp[j]: 前i种债券, 装进不超过j的资产时,能获得的最大价值(即利息)。i被压缩掉了 15 | int dp[maxm]; 16 | 17 | int main() { 18 | scanf("%d %d %d", &s, &n, &d); 19 | for(int i = 1; i <= d; ++i) { 20 | scanf("%d %d", &A[i].a, &A[i].b); 21 | } 22 | int max_money = s; 23 | // 每年都跑一次背包 24 | for(int k = 1; k <= n; ++k) { 25 | for(int i = 1; i <= d; ++i) { 26 | for(int j = 0; j <= max_money; ++j) { 27 | // 不选 28 | dp[j] = dp[j]; 29 | // 选 30 | if (j - A[i].a >= 0) 31 | dp[j] = std::max(dp[j], dp[j - A[i].a] + A[i].b); 32 | } 33 | } 34 | max_money += dp[max_money]; 35 | } 36 | printf("%d", max_money); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /动态规划/P2008.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-24 3 | // 4 | 5 | // https://www.luogu.org/problem/P2008 6 | #include 7 | 8 | const int maxn = 1e4 + 5; 9 | int n, A[maxn]; 10 | // dp[i]:前i个元素,以第i个元素结尾的最长不下降长度 11 | int dp[maxn]; 12 | // sum[i]:dp[i]取最优时对应下的和 13 | int sum[maxn]; 14 | 15 | int main(){ 16 | scanf("%d", &n); 17 | for(int i=1;i<=n;++i){ 18 | scanf("%d", &A[i]); 19 | } 20 | for(int i=1;i<=n;++i){ 21 | // 至少为1,即它本身 22 | dp[i] = 1; 23 | sum[i] = A[i]; 24 | 25 | for(int j=1;j 6 | 7 | const int maxn = 5e3 + 10; 8 | int wky,wang; 9 | int m,n,T; 10 | int t[maxn]; 11 | int dp[maxn][maxn]; 12 | 13 | struct node{ 14 | int id; 15 | int value; 16 | }A[maxn]; 17 | 18 | int main(){ 19 | scanf("%d %d %d %d",&wky, &wang, &m, &n); 20 | for(int i=1;i<=n;++i){ 21 | int tmp; 22 | scanf("%d",&tmp); 23 | t[i] = tmp * (wang/wky); 24 | } 25 | for(int i=1;i<=m;++i){ 26 | scanf("%d %d",&A[i].id, &A[i].value); 27 | } 28 | scanf("%d",&T); 29 | for(int i=1;i<=m;++i){ 30 | for(int j=0;j<=T;++j){ 31 | dp[i][j] = std::max(dp[i][j], dp[i-1][j]); 32 | if(j-t[A[i].id]>=0) 33 | dp[i][j] = std::max(dp[i][j], dp[i-1][j-t[A[i].id] ] + A[i].value); 34 | } 35 | } 36 | printf("%d",dp[m][T]); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /动态规划/P2663.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-09 3 | // 4 | // https://www.luogu.org/problem/P2663 5 | 6 | #include 7 | 8 | const int maxn = 1e2+10; 9 | int n; 10 | // 定义dp[i][j][k]为前i个数中,选取j个数,能否组成和为k 11 | int dp[2][maxn][maxn*maxn/10]; 12 | 13 | int main(){ 14 | scanf("%d",&n); 15 | int sum = 0; 16 | // 初始化 17 | dp[0&1][0][0] = 1; 18 | for(int i=1;i<=n;++i){ 19 | int tmp; 20 | scanf("%d",&tmp); 21 | sum += tmp; 22 | for(int j=0;j<=i;++j){ 23 | for(int k=0;k<=maxn*maxn-10;++k){ 24 | // 不选 25 | if(i-1>=0) 26 | dp[i&1][j][k] |= dp[(i-1)&1][j][k]; 27 | // 选 28 | if(i-1>=0 && j-1>=0 && k-tmp>=0) 29 | dp[i&1][j][k] |= dp[(i-1)&1][j-1][k-tmp]; 30 | } 31 | } 32 | } 33 | int ans =0; 34 | for(int k=sum/2;k>=0;--k){ 35 | if(dp[n&1][n/2][k]){ 36 | ans = k; 37 | break; 38 | } 39 | } 40 | printf("%d\n",ans); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /动态规划/P4170.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-15 13:54:47 PM 5 | * File Name : P4170.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int INF = 1e9; 18 | const int N = 50 + 5; 19 | char A[N]; 20 | 21 | // dp[i][j]: 将白板从i~j区间刷成对应板子的颜色, 最少的次数 22 | int dp[N][N]; 23 | int dfs(int i, int j) { 24 | if (dp[i][j] != -1) 25 | return dp[i][j]; 26 | // 递归的边界 27 | if (i == j) 28 | return 1; 29 | int ret = INF; 30 | if (A[i] == A[j]) 31 | ret = std::min(ret, dfs(i, j - 1)), 32 | ret = std::min(ret, dfs(i + 1, j)); 33 | for (int k = i; k < j; ++k) 34 | ret = std::min(ret, dfs(i, k) + dfs(k + 1, j)); 35 | return dp[i][j] = ret; 36 | } 37 | int main() { 38 | std::memset(dp, -1, sizeof dp); 39 | scanf("%s", A + 1); 40 | printf("%d\n", dfs(1, strlen(A + 1))); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /动态规划/POJ-1631.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-12 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | const int INF = 1e9; 12 | const int maxn = 4e4 + 5; 13 | int t, n; 14 | // dp[i]: 长度为i时, 的最小值 15 | int dp[maxn]; 16 | 17 | int main() { 18 | scanf("%d", &t); 19 | while (t--) { 20 | scanf("%d", &n); 21 | 22 | std::fill(dp, dp + n + 5, INF); 23 | for (int i = 1; i <= n; ++i) { 24 | int a; 25 | scanf("%d", &a); 26 | *std::lower_bound(dp + 1, dp + 1 + n, a) = a; 27 | } 28 | printf("%d\n", std::lower_bound(dp + 1, dp + 1 + n, INF) - (dp + 1)); 29 | } 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /动态规划/POJ-1664.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-11 3 | * 4 | */ 5 | 6 | #include 7 | 8 | int t; 9 | int m, n; 10 | 11 | int dfs(int mm, int nn) { 12 | if (nn == 1 || mm ==0) 13 | return 1; 14 | int sum = 0; 15 | sum += dfs(mm, nn- 1); 16 | if (mm - nn >= 0) 17 | sum += dfs(mm - nn, nn); 18 | return sum; 19 | } 20 | 21 | int main() { 22 | scanf("%d", &t); 23 | while (t--) { 24 | scanf("%d %d", &m, &n); 25 | printf("%d\n", dfs(m, n)); 26 | } 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /动态规划/POJ-2229-timeout.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-07-24 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | const int mod = 1e9; 12 | int n,ans; 13 | 14 | void dfs(int n, int power){ 15 | if(n==0){ 16 | ans = (ans+1)%mod; 17 | return ; 18 | } 19 | for(int i=power;std::pow(2,i)<=n;++i){ 20 | dfs(n-std::pow(2,i),i); 21 | } 22 | } 23 | int main(){ 24 | scanf("%d",&n); 25 | dfs(n,0); 26 | printf("%d",ans); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /动态规划/POJ-2229.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-07-29 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | const int mod = 1e9; 10 | const int maxn = 1e6 + 10; 11 | int n; 12 | int dp[maxn*2]; 13 | 14 | int main(){ 15 | scanf("%d",&n); 16 | dp[1] = 1; 17 | for(int i=1;i<=n;++i){ 18 | dp[i+1] = (dp[i+1] + dp[i]) % mod; 19 | dp[2*i] = (dp[2*i] + dp[i]) % mod; 20 | } 21 | printf("%d",dp[n]); 22 | return 0; 23 | } 24 | -------------------------------------------------------------------------------- /动态规划/POJ-2533-nlogn.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-07 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | const int maxn = 1e3+10; 12 | const int INF = 1e9; 13 | int n; 14 | int dp[maxn]; 15 | 16 | int main(){ 17 | scanf("%d",&n); 18 | std::fill(dp+1,dp+1+n+2,INF); 19 | for(int i=1;i<=n;++i){ 20 | int tmp; 21 | scanf("%d",&tmp); 22 | int pos = std::lower_bound(dp+1,dp+1+n,tmp) - dp; 23 | dp[pos] = tmp; 24 | } 25 | int number = std::lower_bound(dp+1,dp+1+n,INF) - dp - 1; 26 | printf("%d\n",number); 27 | return 0; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /动态规划/POJ-2533.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-07 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | const int maxn = 1e3+10; 12 | int n; 13 | int A[maxn],dp[maxn]; 14 | 15 | int main(){ 16 | scanf("%d",&n); 17 | for(int i=1;i<=n;++i){ 18 | scanf("%d",&A[i]); 19 | } 20 | // 初始化,以自己为结尾的话,至少长度为1 21 | std::fill(dp+1,dp+1+n,1); 22 | for(int i=1;i<=n;++i){ 23 | for(int k=1;k 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | const int maxn=350+10; 12 | int n; 13 | int A[maxn][maxn],sum[maxn][maxn]; 14 | 15 | int main(){ 16 | scanf("%d",&n); 17 | for(int i=1;i<=n;++i){ 18 | for(int j=1;j<=i;++j){ 19 | scanf("%d",&A[i][j]); 20 | } 21 | } 22 | sum[1][1]=A[1][1]; 23 | for(int i=1;i<=n-1;++i){ 24 | for(int j=1;j<=i;++j){ 25 | sum[i+1][j]=std::max(sum[i+1][j],sum[i][j]+A[i+1][j]); 26 | sum[i+1][j+1]=std::max(sum[i+1][j+1],sum[i][j]+A[i+1][j+1]); 27 | } 28 | } 29 | int mx_value=0; 30 | for(int j=1;j<=n;++j){ 31 | mx_value=std::max(mx_value,sum[n][j]); 32 | } 33 | printf("%d",mx_value); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /动态规划/POJ-3181-wrong.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-14 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 1e3 + 5; 9 | int n, k; 10 | int dp[maxn][maxn]; 11 | 12 | int main() { 13 | scanf("%d %d", &n, &k); 14 | dp[0][0] = 1; 15 | for (int i = 1; i <= k; ++i) { 16 | for (int j = 0; j <= n; ++j) { 17 | // 不选 18 | dp[i][j] = dp[i - 1][j]; 19 | // 加选一件 20 | if (j - i >= 0) 21 | dp[i][j] = dp[i][j] + dp[i][j - i]; 22 | } 23 | } 24 | printf("%d\n", dp[k][n]); 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /动态规划/POJ-3616.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-01 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | const int maxn = 1e3 + 10; 11 | int n,m,rest; 12 | int dp[maxn]; 13 | 14 | struct node{ 15 | int s_,e_,efficiency; 16 | bool operator<(const node &rhs) const { 17 | return e_ < rhs.e_; 18 | } 19 | }A[maxn]; 20 | 21 | int main(){ 22 | scanf("%d %d %d",&n,&m,&rest); 23 | for(int i=1;i<=m;++i){ 24 | scanf("%d %d %d",&A[i].s_,&A[i].e_,&A[i].efficiency); 25 | } 26 | // 按结束时间从小到大排序 27 | std::sort(A+1,A+1+m); 28 | 29 | for(int i=1;i<=m;++i){ 30 | dp[i] = A[i].efficiency; 31 | for(int j=1;j<=i-1;++j){ 32 | // 状态j的结束时间 + 休息时间要<= 状态i的开始时间 33 | if(A[j].e_ + rest <= A[i].s_) 34 | dp[i] = std::max(dp[i], dp[j]+A[i].efficiency); 35 | } 36 | } 37 | int ans = *std::max_element(dp+1,dp+1+m); 38 | printf("%d",ans); 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /动态规划/POJ-3624.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-07-26 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | const int maxn = 12880+10; 12 | int n,m; 13 | // 滚动数组 14 | int dp[2][maxn]; 15 | 16 | int main(){ 17 | scanf("%d %d",&n,&m); 18 | dp[0][0]=0; 19 | for(int i=0;i<=n-1;++i){ 20 | int w,d; 21 | scanf("%d %d",&w,&d); 22 | for(int j=0;j<=m;++j){ 23 | // 不选 24 | dp[(i+1)&1][j]=std::max(dp[(i+1)&1][j],dp[(i)&1][j]); 25 | // 选 26 | if(j+w<=m) 27 | dp[(i+1)&1][j+w]=std::max(dp[(i+1)&1][j+w],dp[(i)&1][j]+d); 28 | } 29 | } 30 | printf("%d",dp[n&1][m]); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /动态规划/POJ-3666.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-08-03 3 | // 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | const int INF = 1e9; 11 | const int maxn = 2e3+10; 12 | int n; 13 | int A[maxn],B[maxn]; 14 | int dp[maxn][maxn]; 15 | 16 | int main(){ 17 | scanf("%d",&n); 18 | for(int i=1;i<=n;++i){ 19 | scanf("%d",&A[i]); 20 | B[i] = A[i]; 21 | } 22 | // 将数组A复制到B,然后对B数组排序 23 | // poj的编译器不支持-std=c++11,所以用不了std::copy_n函数 24 | // std::copy_n(A+1,n,B+1); 25 | std::sort(B+1,B+1+n); 26 | 27 | for(int i=1;i<=n;++i){ 28 | // min_ 记录的是上一层从1到j的最小值 29 | int min_ = INF; 30 | for(int j=1;j<=n;++j){ 31 | dp[i][j] = INF; 32 | min_ = std::min(min_,dp[i-1][j]); 33 | dp[i][j] = std::min(dp[i][j], min_ + std::abs(A[i]-B[j])); 34 | } 35 | } 36 | int ans = *std::min_element(dp[n]+1,dp[n]+1+n); 37 | printf("%d",ans); 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /动态规划/UVA-10003.cc: -------------------------------------------------------------------------------- 1 | // 2 | // created by OFShare on 2019-09-01 3 | // 4 | 5 | #include 6 | 7 | const int INF = 1e5; 8 | const int maxn = 50 + 5; 9 | int L,n; 10 | int A[maxn]; 11 | // dp[i][j]: i到j这个区间最少的费用 12 | int dp[maxn][maxn]; 13 | 14 | int dfs(int start_, int end_){ 15 | if(dp[start_][end_] != -1) return dp[start_][end_]; 16 | // 递归边界, 两个端点不能切 17 | if(end_ - start_ ==1) 18 | return dp[start_][end_] = 0; 19 | int ans = INF; 20 | for(int k=start_+1; k 6 | 7 | const int INF = 1e5; 8 | const int maxn = 1e3 + 5; 9 | int n; 10 | char A[maxn]; 11 | // dp[i]:前i个字符组成的最少的回文串组数 12 | int dp[maxn]; 13 | 14 | int is_palindrome(int start_, int end_){ 15 | if((start_ > end_) || (start_ == end_)) 16 | return 1; 17 | if(A[start_] == A[end_]) 18 | return is_palindrome(start_+1, end_-1); 19 | return INF; 20 | } 21 | 22 | int main(){ 23 | scanf("%d", &n); 24 | while(n--){ 25 | scanf("%s", A+1); 26 | // 初始化 27 | std::fill(dp, dp+maxn, INF); 28 | dp[1] = 1; 29 | 30 | for(int i=1; i<=strlen(A+1); ++i){ 31 | // 考虑整个串构成一个回文串 32 | dp[i] = std::min(dp[i], is_palindrome(1, i)); 33 | for(int j=1; j 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | using namespace std; 17 | struct h{ 18 | int k,t; 19 | }x[2500]; 20 | int cmp(const h&a,const h&b) 21 | { 22 | return a.k>b.k; 23 | } 24 | int max(int a,int b) 25 | { 26 | return (a>b?a:b); 27 | } 28 | int f[2500][2500]; 29 | int pop,n,ans; 30 | int main() 31 | { 32 | debug(); 33 | scanf("%d",&n); 34 | for (int i=1;i<=n;i++) scanf("%d %d",&x[i].k,&x[i].t) ; 35 | //k为挂钩数,t为喜悦值 36 | sort(x+1,x+n+1,cmp);//排序 37 | memset(f,-210000000,sizeof(f));//先预处理为最小值 38 | f[0][1]=0;//手机上原来就有个挂钩所以算作0; 39 | for (int i=1;i<=n;i++) 40 | for (int j=0;j<=n;j++) 41 | f[i][j]=max(f[i-1][j],f[i-1][max(j-x[i].k,0)+1]+x[i].t); 42 | ans=0; 43 | for (int i=0;i<=n;i++) 44 | ans=max(ans,f[n][i]);//去看看最后的答案 45 | printf("%d",ans); 46 | return 0; 47 | } 48 | -------------------------------------------------------------------------------- /图论/README.md: -------------------------------------------------------------------------------- 1 | ##### TODO(图论) 2 | -------------------------------------------------------------------------------- /图论/搜索/POJ-3050.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-11-25 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | const int dx[] = {1, 0, -1, 0}; 13 | const int dy[] = {0, 1, 0, -1}; 14 | int mp[6][6]; 15 | std::set st; 16 | 17 | void dfs(int i, int j, int step, std::string str) { 18 | str += mp[i][j] + '0'; 19 | // 递归的边界 20 | if (step == 5) { 21 | st.insert(str); 22 | return; 23 | } 24 | for (int k = 0; k < 4; ++k) { 25 | int xx = i + dx[k], yy = j + dy[k]; 26 | if (xx >= 1 && xx <= 5 && yy >= 1 && yy <= 5) 27 | dfs(xx, yy, step + 1, str); 28 | } 29 | } 30 | 31 | int main() { 32 | for (int i = 1; i <= 5; ++i) 33 | for (int j = 1; j <= 5; ++j) 34 | scanf("%d", &mp[i][j]); 35 | for (int i = 1; i <= 5; ++i) 36 | for (int j = 1; j <= 5; ++j) 37 | dfs(i, j, 0, ""); 38 | printf("%d", (int)st.size()); 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /图论/搜索/POJ-3187.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-11-25 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | int n, sum; 12 | int A[15]; 13 | 14 | bool is_ok() { 15 | int tmp[15]; 16 | for (int i = 0; i <= n; ++i) 17 | tmp[i] = A[i]; 18 | 19 | int round = n - 1; 20 | for (int i = 0; i < n - 1; ++i) { 21 | for (int j = 1; j <= round; ++j) 22 | tmp[j] = tmp[j] + tmp[j + 1]; 23 | --round; 24 | } 25 | if (tmp[1] == sum) 26 | return true; 27 | else 28 | return false; 29 | } 30 | 31 | int main() { 32 | scanf("%d %d", &n, &sum); 33 | for (int i = 1; i <= n; ++i) 34 | A[i] = i; 35 | do { 36 | if (is_ok()) 37 | break; 38 | } while(std::next_permutation(A + 1, A + 1 + n)); 39 | for (int i = 1; i <= n; ++i) { 40 | if (i == 1) 41 | printf("%d", A[i]); 42 | else 43 | printf(" %d", A[i]); 44 | } 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /字符串/HDU-4821-tle.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2020-01-25, 春节期间 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | const int maxn = 1e5 + 5; 13 | struct node { 14 | std::string str; 15 | bool operator<(const node &rhs) const { 16 | if (str == rhs.str) 17 | return false; 18 | return true; 19 | } 20 | }; 21 | 22 | int M, L; 23 | char tmp[maxn]; 24 | 25 | int main() { 26 | while (scanf("%d %d", &M, &L) != EOF) { 27 | scanf("%s", tmp); 28 | std::string str = std::string(tmp); 29 | 30 | int ans = 0; 31 | for (int i = 0; i + M * L <= str.size(); ++i) { 32 | std::set st; 33 | std::string middle = str.substr(i, M * L); 34 | for (int j = 0; j + L <= middle.size(); j += L) { 35 | node nd; 36 | nd.str = middle.substr(j, L); 37 | st.insert(nd); 38 | } 39 | if (st.size() == M) 40 | ++ans; 41 | } 42 | printf("%d\n", ans); 43 | } 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /字符串/P3370.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2020-01-29, 春节期间 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 1500 + 5; 9 | int n; 10 | std::set st; 11 | 12 | int main() { 13 | scanf("%d", &n); 14 | for (int i = 1; i <= n; ++i) { 15 | char tmp[maxn]; 16 | scanf("%s", tmp); 17 | std::string str(tmp); 18 | st.insert(str); 19 | } 20 | printf("%d\n", st.size()); 21 | return 0; 22 | } 23 | -------------------------------------------------------------------------------- /常用技巧/POJ-3061.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-08 16:30:11 PM 5 | * File Name : POJ-3061.cc 6 | */ 7 | 8 | //#include 9 | #include 10 | #include 11 | 12 | void debug() { 13 | #ifdef Acui 14 | freopen("data.in", "r", stdin); 15 | freopen("data.out", "w", stdout); 16 | #endif 17 | } 18 | 19 | const int INF = 1e9; 20 | const int MAXN = 1e5 + 5; 21 | int t, N, S, A[MAXN]; 22 | 23 | int main() { 24 | scanf("%d", &t); 25 | while (t--) { 26 | int ans = INF; 27 | scanf("%d %d", &N, &S); 28 | for (int i = 1; i <= N; ++i) 29 | scanf("%d", &A[i]); 30 | int L = 1, R = 1, sum = A[1]; 31 | while (L <= R && L <= N && R <= N) { 32 | if (sum >= S) ans = std::min(ans, R - L + 1), sum -= A[L], ++L; 33 | else ++R, sum += A[R]; 34 | } 35 | if (ans >= INF) printf("0\n"); 36 | else printf("%d\n", ans); 37 | } 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /常用技巧/README.md: -------------------------------------------------------------------------------- 1 | ### 常用技巧 2 | 3 | - 尺取法 or 双指针法 or 滑动窗口 4 | - 二分 5 | - 反转(开关问题) 6 | 7 | --- 8 | 9 | 1. 例题[POJ-3061](https://vjudge.net/problem/POJ-3061), AC[源码](./POJ-3061.cc) 10 | 11 | 尺取法入门题. 12 | 13 | 2. 例题[POJ-3320](https://vjudge.net/problem/POJ-3320), AC[源码](./POJ-3320.cc) 14 | 15 | 尺取法 16 | 17 | 3. 例题[POJ-3276](https://vjudge.net/problem/POJ-3276), AC[源码](./POJ-3276.cc) 18 | 19 | 反转问题, 区间反转的优化非常妙. 可以做到常数级别. 20 | 21 | 最开始我也不懂, 看了这篇[文章](https://www.cnblogs.com/tmeteorj/archive/2012/10/11/2720537.html)的题解恍然大悟, 这篇文章提出了一个叫做**依赖关系的模型**, 前后依赖. 22 | 23 | 他指出在这种模型下: "在一个区间内[a,b]翻转时,实际上[a+1,b]的依赖关系是没有改变的,改变的只有a,b+1。" 24 | 25 | 我这里稍微解释一下这句话: 26 | 27 | 假设[a, b]区间为[a1, a2, a3, a4, a5, a6], 当我们要把a1到a6都反转的时候, a1因为依赖a0, 所以a1的依赖关系会变, 同理a7的依赖关系也变, 但是a2, a3, a4, a5, a6它们的依赖关系不变, 因为它们是同时反转的即同时变.如果还不懂, 大家可以在草稿纸上画画. 28 | 29 | 4. -------------------------------------------------------------------------------- /数学/Aizu-0005.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-21 3 | * 4 | */ 5 | 6 | #include 7 | 8 | long long gcd(long long a, long long b) { 9 | return b == 0 ? a: gcd(b, a % b); 10 | } 11 | 12 | long long lcm(long long a, long long b) { 13 | return a / gcd(a, b) * b; 14 | } 15 | 16 | int main() { 17 | long long x, y; 18 | while (scanf("%lld %lld", &x, &y) != EOF) { 19 | printf("%lld %lld\n", gcd(x, y), lcm(x, y)); 20 | } 21 | return 0; 22 | } 23 | -------------------------------------------------------------------------------- /数学/Aizu-0009.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-22 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 1e6 + 5; 9 | int n; 10 | bool is_prime[maxn]; 11 | int sum[maxn]; 12 | 13 | void find_prime() { 14 | for (int i = 2; i <= maxn - 5; ++i) 15 | is_prime[i] = true; 16 | for (int i = 2; i <= maxn - 5; ++i) { 17 | if (is_prime[i]) { 18 | for (long long j = 1L * i * i; j <= maxn - 5; j += i) 19 | is_prime[j] = false; 20 | } 21 | } 22 | 23 | for (int i = 2; i <= maxn - 5; ++i) { 24 | if (is_prime[i]) 25 | sum[i] = sum[i - 1] + 1; 26 | else 27 | sum[i] = sum[i - 1] + 0; 28 | } 29 | } 30 | 31 | int main() { 32 | find_prime(); 33 | while (scanf("%d", &n) != EOF) { 34 | printf("%d\n", sum[n]); 35 | } 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /数学/POJ-1006.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-18 17:52:28 PM 5 | * File Name : POJ-1006.cc 6 | */ 7 | 8 | //#include 9 | #include 10 | 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int p, e, i, d; 19 | int main() { 20 | int kase = 0; 21 | while (scanf("%d %d %d %d", &p, &e, &i, &d)) { 22 | if (p + e + i + d == -4) break; 23 | // 暴力枚举可能的天数 24 | for (int day = d + 1; ;) { 25 | if ((day - p) % 23 == 0 && (day - e) % 28 == 0 && (day - i) % 33 == 0) { 26 | printf("Case %d: the next triple peak occurs in %d days.\n", ++kase, day - d); 27 | break; 28 | } 29 | if ((day - e) % 28 == 0 && (day - i) % 33 == 0) day += 28 * 33; 30 | else if ((day - i) % 33 == 0) day += 33; 31 | else if ((day - e) % 28 == 0) day += 28; 32 | else if ((day - p) % 23 == 0) day += 23; 33 | else day += 1; 34 | } 35 | 36 | } 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /数学/POJ-1995.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-23 3 | * 4 | */ 5 | 6 | #include 7 | 8 | long long pow_mod(int base, int n, int MOD) { 9 | long long result = 1; 10 | long long x = base; 11 | while (n) { 12 | if (n & 1) result = result * x % MOD; 13 | x = x * x % MOD; 14 | n >>= 1; 15 | } 16 | return result % MOD; 17 | } 18 | 19 | int T, M, H; 20 | int main() { 21 | scanf("%d", &T); 22 | while (T--) { 23 | scanf("%d %d", &M, &H); 24 | long long result = 0; 25 | for (int i = 1; i <= H; ++i) { 26 | int A, B; 27 | scanf("%d %d", &A, &B); 28 | result = (result % M + pow_mod(A, B, M) % M ) % M; 29 | } 30 | printf("%lld\n", result); 31 | } 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /数学/POJ-3070.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-28 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int MOD = 1e4; 9 | const int maxn = 1e4 + 5; 10 | int n; 11 | int F[maxn * maxn]; 12 | 13 | // 找F % MOD 下的循环节 14 | int repetend() { 15 | F[0] = 0 % MOD; F[1] = 1 % MOD; 16 | for (int i = 2; ; ++i) { 17 | F[i] = ((F[i -1] % MOD) + (F[i - 2] % MOD) ) % MOD; 18 | F[i + 1] = ((F[i] % MOD) + (F[i - 1] % MOD) ) % MOD; 19 | if (F[i] == F[0] && F[i + 1] == F[1]) { 20 | return i; 21 | } 22 | } 23 | } 24 | 25 | int main() { 26 | int k = repetend(); 27 | while (scanf("%d", &n) && n != -1) { 28 | int index = n % k; 29 | printf("%d\n", F[index]); 30 | } 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /数学/POJ-3641.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-23 3 | * 4 | */ 5 | 6 | #include 7 | 8 | long long p, a; 9 | 10 | bool is_prime(long long n) { 11 | for (int i = 2; 1L * i * i <= 1L * n; ++i) 12 | if (n % i == 0) 13 | return false; 14 | return true; 15 | } 16 | 17 | long long pow_mod(int base, int n, int MOD) { 18 | long long result = 1; 19 | long long x = base; 20 | while (n) { 21 | if (n & 1) result = result * x % MOD; 22 | x = x * x % MOD; 23 | n >>= 1; 24 | } 25 | return result % MOD; 26 | } 27 | 28 | int main() { 29 | while (scanf("%lld %lld", &p, &a) && (p + a)) { 30 | if (!is_prime(p) && pow_mod(a, p, p) == a % p) { 31 | printf("yes\n"); 32 | } else 33 | printf("no\n"); 34 | } 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /数学/UVA-10006.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-21 3 | * 4 | */ 5 | 6 | #include 7 | 8 | // 9 | bool is_prime(int n) { 10 | for (int i = 2; 1L * i * i <= 1L * n; ++i) { 11 | if (n % i == 0) 12 | return false; 13 | } 14 | return true; 15 | } 16 | 17 | // x ^ y % MOD 18 | long long mod_pow(long long x, long long y, long long MOD) { 19 | long long result = 1; 20 | while (y > 0) { 21 | if (y & 1) result = result * x % MOD; 22 | x = x * x % MOD; 23 | y >>= 1; 24 | } 25 | return result % MOD; 26 | } 27 | 28 | bool Carmichael_number(int n) { 29 | for (long long a = 2; a <= n - 1; ++a) { 30 | if (mod_pow(a, n, n) != a) 31 | return false; 32 | } 33 | return true; 34 | } 35 | 36 | int number; 37 | int main() { 38 | while (scanf("%d", &number) && number) { 39 | if (!is_prime(number) && Carmichael_number(number)) { 40 | printf("The number %d is a Carmichael number.\n", number); 41 | } else { 42 | printf("%d is normal.\n", number); 43 | } 44 | } 45 | return 0; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /数学/UVA-10791.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-28 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 1e7 + 5; 9 | long long n; 10 | std::map mp; 11 | 12 | // 唯一分解定理 13 | void decompose(long long n) { 14 | for (long long i = 2; i * i <= n; ++i) { 15 | while (n % i == 0) { 16 | mp[i]++; 17 | n /= i; 18 | } 19 | } 20 | if (n > 1) mp[n]++; 21 | } 22 | 23 | int main() { 24 | #ifdef Acui 25 | freopen("data.in", "r", stdin); 26 | freopen("data.out", "w", stdout); 27 | #endif 28 | 29 | int kase = 0; 30 | while (scanf("%lld", &n) && n) { 31 | mp.clear(); 32 | decompose(n); 33 | if (mp.size() <= 1) { 34 | printf("Case %d: %lld\n", ++kase, 1 + n); 35 | continue; 36 | } 37 | long long ans = 0; 38 | for (auto &ch: mp) { 39 | ans += std::pow(ch.first, ch.second); 40 | } 41 | printf("Case %d: %lld\n", ++kase, ans); 42 | } 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /数学/UVA-12169.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-28 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int MOD = 10001; 9 | const int maxn = (1e2 + 5) * 2; 10 | int T; 11 | int X[maxn]; 12 | int main() { 13 | scanf("%d", &T); 14 | for (int i = 1; i <= 2 * T - 1; i += 2) { 15 | scanf("%d", &X[i]); 16 | } 17 | // 枚举a, b 18 | for (int a = 0; a <= 10000; ++a) { 19 | for (int b = 0; b <= 10000; ++b) { 20 | bool flag = true; 21 | for (int i = 1; i <= 2 * T - 1; ++i) { 22 | if (i % 2 == 1) { 23 | X[i + 1] = (a * X[i] + b) % MOD; 24 | } else { 25 | if (X[i + 1] != (a * X[i] + b) % MOD) { 26 | flag = false; 27 | break; 28 | } 29 | } 30 | } 31 | // 找到一组a, b满足 32 | if (flag) { 33 | for (int i = 2; i <= 2 * T; i += 2) { 34 | printf("%d\n", X[i]); 35 | } 36 | return 0; 37 | } 38 | } 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /数学/UVA-12716.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-28 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 3e7 + 5; 9 | int T, n; 10 | int sum[maxn]; 11 | 12 | int gcd(int a, int b) { 13 | return b == 0? a: gcd(b, a % b); 14 | } 15 | 16 | // 有这样一个性质: 17 | // a ^ b = c; a ^ c = b; b ^ c = a; 18 | int XOR(int a, int b) { 19 | return a ^ b; 20 | } 21 | 22 | // 打表, 预先算出来结果 23 | void table() { 24 | for (int c = 1; c <= maxn; ++c) { 25 | for (int a = c; a <= maxn; a += c) { 26 | int b = XOR(a, c); 27 | if (b < 1 || b > a) 28 | continue; 29 | if (/*c == a - b*/ gcd(a, b) == c) { 30 | sum[a]++; 31 | //printf("a: %d b: %d c: %d\n", a, b, c); 32 | } 33 | } 34 | } 35 | 36 | for (int i = 1; i <= maxn; ++i) { 37 | sum[i] = sum[i - 1] + sum[i]; 38 | } 39 | } 40 | 41 | int main() { 42 | table(); 43 | scanf("%d", &T); 44 | int kase = 0; 45 | while (T--) { 46 | scanf("%d", &n); 47 | printf("Case %d: %d\n", ++kase, sum[n]); 48 | } 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /洛谷/README.md: -------------------------------------------------------------------------------- 1 | ##### 洛谷: https://www.luogu.com.cn/problem/list 2 | 3 | - [入门](https://www.luogu.com.cn/problem/list#) 4 | - [普及-](https://www.luogu.com.cn/problem/list#) 5 | - [普及/提高-](https://www.luogu.com.cn/problem/list#) 6 | - [普及+/提高](https://www.luogu.com.cn/problem/list#) 7 | 8 | -------------------------------------------------------------------------------- /洛谷/入门/CF909A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-19 17:52:09 PM 5 | * File Name : CF909A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | char s1[N], s2[N]; 20 | 21 | int main() { 22 | scanf("%s %s", s1 + 1, s2 + 1); 23 | int len1 = std::strlen(s1 + 1); 24 | int i = 1; 25 | std::string ans; 26 | ans.push_back(s1[i++]); 27 | while (i <= len1) { 28 | if (s1[i] < s2[1]) ans.push_back(s1[i++]); 29 | else break; 30 | } 31 | ans.push_back(s2[1]); 32 | printf("%s", ans.c_str()); 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /洛谷/入门/P1116.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-07 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 1e4 + 5; 9 | int n; 10 | int A[maxn]; 11 | 12 | int main() { 13 | scanf("%d", &n); 14 | for (int i = 1; i <= n; ++i) { 15 | scanf("%d", &A[i]); 16 | } 17 | 18 | int cnt = 0; 19 | while (true) { 20 | bool updated = false; 21 | for (int i = 1; i <= n - 1; ++i) { 22 | if (A[i] > A[i + 1]) { 23 | ++cnt; 24 | std::swap(A[i], A[i + 1]); 25 | updated = true; 26 | } 27 | } 28 | if (!updated) 29 | break; 30 | } 31 | printf("%d\n", cnt); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/P1138.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-07 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int maxn = 3e4 + 5; 9 | int n, k; 10 | int A[maxn]; 11 | 12 | int main() { 13 | scanf("%d %d", &n, &k); 14 | for (int i = 1; i <= n; ++i) { 15 | int a; 16 | scanf("%d", &a); 17 | A[a]++; 18 | } 19 | 20 | int cnt = 0; 21 | for (int i = 1; i <= maxn - 3; ++i) { 22 | if (A[i] >= 1) 23 | ++cnt; 24 | if (cnt == k) { 25 | printf("%d\n", i); 26 | return 0; 27 | } 28 | } 29 | printf("NO RESULT\n"); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P1146.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 15:19:26 PM 5 | * File Name : P1146.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e2 + 5; 18 | int n; 19 | int A[N]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | printf("%d\n", n); 24 | for (int i = 1; i <= n; ++i) { 25 | for (int j = 1; j <= n; ++j) { 26 | if (i != j) 27 | A[j] = 1 - A[j]; 28 | } 29 | for (int j = 1; j <= n; ++j) 30 | printf("%d", A[j]); 31 | printf("\n"); 32 | } 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /洛谷/入门/P1150.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-07 3 | * 4 | */ 5 | 6 | #include 7 | 8 | int n, k; 9 | int main() { 10 | scanf("%d %d", &n, &k); 11 | 12 | int ans = n; 13 | while (n / k) { 14 | ans += n / k; 15 | n = n / k + n % k; 16 | } 17 | printf("%d\n", ans); 18 | return 0; 19 | } 20 | -------------------------------------------------------------------------------- /洛谷/入门/P1151.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-07 3 | * 4 | */ 5 | 6 | #include 7 | 8 | int k; 9 | int A[6]; 10 | 11 | int func(int start) { 12 | int sum = 0; 13 | int cnt = 2; 14 | for (int i = start; i <= start + 3; ++i) { 15 | sum += A[i] * std::pow(10, cnt--); 16 | } 17 | return sum; 18 | } 19 | 20 | int main() { 21 | scanf("%d", &k); 22 | 23 | bool updated = false; 24 | for (int num = 10000; num <= 30000; ++num) { 25 | int tmp = num; 26 | for (int i = 5; i >= 1; --i) { 27 | A[i] = tmp % 10; 28 | tmp /= 10; 29 | } 30 | int sub1 = func(1); 31 | int sub2 = func(2); 32 | int sub3 = func(3); 33 | if (sub1 % k == 0 && sub2 % k == 0 && sub3 % k ==0) { 34 | printf("%d\n", num); 35 | updated = true; 36 | } 37 | } 38 | if (!updated) 39 | printf("No\n"); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/入门/P1152.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 15:35:07 PM 5 | * File Name : P1152.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e3 + 5; 18 | int n, A[N]; 19 | int main() { 20 | scanf("%d", &n); 21 | for (int i = 1; i <= n; ++i) 22 | scanf("%d", &A[i]); 23 | std::set st; 24 | for (int i = 1; i <= n - 1; ++i) 25 | st.insert(std::abs(A[i + 1] - A[i])); 26 | if (st.size() == n - 1) 27 | printf("Jolly\n"); 28 | else 29 | printf("Not jolly\n"); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P1161.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 15:46:46 PM 5 | * File Name : P1161.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n, ans = 0; 18 | int main() { 19 | scanf("%d", &n); 20 | for (int i = 1; i <= n; ++i) { 21 | double a; 22 | int t; 23 | scanf("%lf %d", &a, &t); 24 | for (int j = 1; j <= t; ++j) 25 | ans ^= (int)(a * j); 26 | } 27 | printf("%d\n", ans); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/入门/P1179.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 15:52:20 PM 5 | * File Name : P1179.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int L, R; 18 | int count(int i) { 19 | int ret = 0; 20 | while (i) { 21 | if (i % 10 == 2) ++ret; 22 | i /= 10; 23 | } 24 | return ret; 25 | } 26 | int main() { 27 | scanf("%d %d", &L, &R); 28 | int ans = 0; 29 | for (int i = L; i <= R; ++i) { 30 | ans += count(i); 31 | } 32 | printf("%d\n", ans); 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /洛谷/入门/P1296.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-20 11:17:44 AM 5 | * File Name : P1296.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e6 + 5; 18 | int n, d, A[N]; 19 | 20 | int main() { 21 | scanf("%d %d", &n, &d); 22 | for (int i = 1; i <= n; ++i) 23 | scanf("%d", &A[i]); 24 | std::sort(A + 1, A + 1 + n); 25 | // 排序后扫一遍 26 | long long ans = 0; 27 | for (int i = 1; i <= n; ++i) { 28 | int *it = std::upper_bound(A + 1, A + 1 + n, A[i] + d); 29 | ans += it - (A + i) - 1; 30 | } 31 | printf("%lld\n", ans); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/P1317.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-21 16:32:33 PM 5 | * File Name : P1317.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n, ans = 0; 18 | int main() { 19 | scanf("%d", &n); 20 | // 扫一遍, 扫的过程维护一些变量即可, pre_down, pre_height 21 | bool pre_down = false; 22 | int pre_height = -1; 23 | for (int i = 1; i <= n; ++i) { 24 | int height; 25 | scanf("%d", &height); 26 | if (height > pre_height) { 27 | if (pre_down == true) 28 | ++ans; 29 | pre_down = false; 30 | } else 31 | pre_down = true; 32 | pre_height = height; 33 | } 34 | printf("%d\n", ans); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/入门/P1319.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-21 17:05:18 PM 5 | * File Name : P1319.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int MOD = 2; 18 | int n, number; 19 | int cnt = 0; 20 | 21 | std::vector vec; 22 | int main() { 23 | debug(); 24 | scanf("%d", &n); 25 | while (scanf("%d", &number) != EOF) { 26 | if (cnt++ % MOD == 0) { 27 | for (int i = 0; i < number; ++i) 28 | vec.push_back(0); 29 | } else { 30 | for (int i = 0; i < number; ++i) 31 | vec.push_back(1); 32 | } 33 | } 34 | for (int i = 0; i < vec.size(); ++i) { 35 | if (i && i % n == 0) 36 | printf("\n"); 37 | printf("%d", vec[i]); 38 | } 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/入门/P1420.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 13:49:31 PM 5 | * File Name : P1420.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n; 18 | int main() { 19 | scanf("%d", &n); 20 | int pre, ans = 0, cur = 0; 21 | for (int i = 1; i <= n; ++i) { 22 | int a; 23 | scanf("%d", &a); 24 | 25 | if (i == 1) { 26 | ans = 1; 27 | cur = 1; 28 | pre = a; 29 | continue; 30 | } 31 | if (a - pre == 1) ++cur; 32 | else cur = 1; 33 | pre = a; 34 | ans = std::max(ans, cur); 35 | } 36 | printf("%d\n", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/入门/P1482.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 14:02:32 PM 5 | * File Name : P1482.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int a, b, c, d; 18 | int main() { 19 | scanf("%d/%d", &a, &b); 20 | scanf("%d/%d", &c, &d); 21 | 22 | int gcd = std::__gcd(a * c, b * d); 23 | // 第几列第几行, 先列后行 24 | printf("%d %d\n", b * d / gcd, a * c / gcd); 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /洛谷/入门/P1534.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 15:57:20 PM 5 | * File Name : P1534.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n; 18 | int main() { 19 | scanf("%d", &n); 20 | int pre = 0, ans = 0; 21 | for (int i = 1; i <= n; ++i) { 22 | int a, b; 23 | scanf("%d %d", &a, &b); 24 | 25 | pre = pre + a + b - 8; 26 | ans += pre; 27 | } 28 | printf("%d\n", ans); 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/入门/P1548.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-21 11:57:24 AM 5 | * File Name : P1548.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n, m, square = 0, rectangle = 0; 18 | void count(int i, int j) { 19 | // 枚举左上角(i, j)可以构成的正方形个数 20 | int len = std::min(m - j + 1, n - i + 1); 21 | square += len; 22 | // 枚举左上角(i, j)可以构成的长方形个数 23 | len = m - j + 1; 24 | for (int k1 = 1; k1 <= len; ++k1) { 25 | for (int k2 = 1; ; ++k2) { 26 | if (i + k2 - 1 <= n) { 27 | if (k1 != k2) 28 | rectangle++; 29 | } 30 | else 31 | break; 32 | } 33 | } 34 | } 35 | int main() { 36 | scanf("%d %d", &n, &m); 37 | for (int i = 1; i <= n; ++i) { 38 | for (int j = 1; j <= m; ++j) { 39 | count(i, j); 40 | } 41 | } 42 | printf("%d %d\n", square, rectangle); 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/入门/P1554.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-21 11:52:40 AM 5 | * File Name : P1554.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 10 + 5; 18 | int m, n, A[N]; 19 | void count(int i) { 20 | while (i) { 21 | ++A[i % 10]; 22 | i /= 10; 23 | } 24 | } 25 | int main() { 26 | scanf("%d %d", &m, &n); 27 | for (int i = m; i <= n; ++i) { 28 | count(i); 29 | } 30 | for (int i = 0; i <= 9; ++i) 31 | printf("%d ", A[i]); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/P1567.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 18:02:43 PM 5 | * File Name : P1567.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e6 + 5; 18 | int n, A[N]; 19 | 20 | int main() { 21 | scanf("%d", &n); 22 | for (int i = 1; i <= n; ++i) 23 | scanf("%d", &A[i]); 24 | // 模拟扫一遍 25 | int ans = 0, pre = -1, consective_day = 0; 26 | for (int i = 1; i <= n; ++i) { 27 | ans = std::max(ans, consective_day); 28 | if (A[i] > pre) ++consective_day; 29 | else consective_day = 1; 30 | pre = A[i]; 31 | ans = std::max(ans, consective_day); 32 | } 33 | printf("%d\n", ans); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/入门/P1597.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-22 21:19:10 PM 5 | * File Name : P1597.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 255 + 5; 18 | int ans[N]; 19 | char A[N]; 20 | 21 | int main() { 22 | debug(); 23 | while (scanf("%c%c%c%c%c", &A[1], &A[2], &A[3], &A[4], &A[5]) != EOF) { 24 | 25 | if (A[1] == 'a') ans['a'] = ((A[4] >= '0' && A[4] <= '9')? A[4] - '0': ans[A[4]]); 26 | else if (A[1] == 'b') ans['b'] = ((A[4] >= '0' && A[4] <= '9')? A[4] - '0': ans[A[4]]); 27 | else if (A[1] == 'c') ans['c'] = ((A[4] >= '0' && A[4] <= '9')? A[4] - '0': ans[A[4]]); 28 | } 29 | printf("%d %d %d\n", ans['a'], ans['b'], ans['c']); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P1614.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 16:25:00 PM 5 | * File Name : P1614.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int INF = 1e9; 18 | const int N = 3e3 + 5; 19 | int n, m; 20 | long long sum[N]; 21 | 22 | int main() { 23 | scanf("%d %d", &n, &m); 24 | if (n == 0 && m == 0) { 25 | printf("0\n"); 26 | return 0; 27 | } 28 | // 前缀和 29 | for (int i = 1; i <= n; ++i) { 30 | long long a; 31 | scanf("%lld", &a); 32 | sum[i] = a + sum[i - 1]; 33 | } 34 | long long ans = INF; 35 | for (int i = 1; i <= n; ++i) { 36 | int j = i + m -1; 37 | if (j > n) break; 38 | ans = std::min(ans, sum[j] - sum[i - 1]); 39 | } 40 | printf("%lld\n", ans); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/入门/P1634.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 16:50:30 PM 5 | * File Name : P1634.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | long long x, n; 18 | long long dfs(int i) { 19 | // 递归的边界 20 | if (i == 0) 21 | return 1; 22 | long long tmp = dfs(i - 1); 23 | return tmp * x + tmp; 24 | } 25 | int main() { 26 | scanf("%lld %lld", &x, &n); 27 | long long ret = dfs(n); 28 | printf("%lld\n", ret); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /洛谷/入门/P1720.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-19 15:59:10 PM 5 | * File Name : P1720.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n; 18 | int main() { 19 | scanf("%d", &n); 20 | if (n == 0) printf("0.00\n"); 21 | else if (n == 1) printf("1.00\n"); 22 | else { 23 | double a = 0, b = 1; 24 | for (int i = 2; ; ++i) { 25 | double c = a + b; 26 | if (i == n) { 27 | printf("%.2lf\n", c * 1.0); 28 | break; 29 | } 30 | a = b; 31 | b = c; 32 | } 33 | } 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/入门/P1789.cc: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | int n, m, k, a, b, ans; 4 | int s[5005][5005]; 5 | bool pd(int x, int y) { //判断是否越界 6 | if(x < 1 || y < 1 || x > n || y > n) return 0; 7 | return 1; 8 | } 9 | int main() { 10 | scanf("%d%d%d", &n, &m, &k); //读入 11 | for(int i = 1; i <= m + k; i++) { //由于计算火把和萤石的步骤很像,所以合并了 12 | scanf("%d%d", &a, &b); //读入坐标 13 | for(int x = -2; x <= 2; x++) 14 | for(int y = -2; y <= 2; y++) //枚举5*5的方阵(通过计算距离) 15 | if((i > m || abs(x) + abs(y) <= 2) && pd(x + a, b + y)) 16 | //如果是萤石(i > m)或者x与y的坐标差的和不超过2(想一想为什么)并且 17 | //没有越界就标记 18 | s[x + a][b + y]++; 19 | } 20 | for(int i = 1; i <= n; i++) 21 | for(int j = 1; j <= n; j++) 22 | ans += s[i][j] == 0; //枚举每一个方格,看看是不是==0(即没有亮光) 23 | printf("%d\n", ans); //输出结果 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /洛谷/入门/P1830.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 11:35:47 AM 5 | * File Name : P1830.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | int n, m, x, y; 20 | int cnt[N][N], last_cnt[N][N]; 21 | 22 | int main() { 23 | scanf("%d %d %d %d", &n, &m, &x, &y); 24 | for (int i = 1; i <= x; ++i) { 25 | int a, b, c, d; 26 | scanf("%d %d %d %d", &a, &b, &c, &d); 27 | for (int k1 = a; k1 <= c; ++k1) { 28 | for (int k2 = b; k2 <= d; ++k2) { 29 | cnt[k1][k2]++; 30 | last_cnt[k1][k2] = i; 31 | } 32 | } 33 | } 34 | for (int i = 1; i <= y; ++i) { 35 | int a, b; 36 | scanf("%d %d", &a, &b); 37 | if (cnt[a][b]) printf("Y %d %d\n", cnt[a][b], last_cnt[a][b]); 38 | else printf("N\n"); 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/入门/P1851.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 15:26:15 PM 5 | * File Name : P1851.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int s; 18 | // 计算x的所有约数的和, 约数不包含它本身 19 | int func(int x) { 20 | int ret = 0; 21 | for (int i = 1; i * i <= x; ++i) { 22 | if (x % i == 0) { 23 | int a = i; 24 | int b = x / i; 25 | ret += a; 26 | if (b != x && a != b) 27 | ret += b; 28 | } 29 | } 30 | return ret; 31 | } 32 | 33 | int main() { 34 | scanf("%d", &s); 35 | int A, B; 36 | for (int i = s; ; ++i) { 37 | A = i; 38 | B = func(A); 39 | // 忽略那些自己是自己的 40 | if (A == B) 41 | continue; 42 | if (func(B) == A) 43 | break; 44 | } 45 | printf("%d %d\n", A, B); 46 | } 47 | -------------------------------------------------------------------------------- /洛谷/入门/P1867.cc: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | int n,x,sum; 4 | double blood=10,t; 5 | int main(){ 6 | cin>>n; 7 | while(n--){ 8 | cin>>t>>x; 9 | blood=min(blood-t,10.0); 10 | if(blood<=0) break; 11 | sum+=x; 12 | } 13 | cout< 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll n; 19 | int main() { 20 | scanf("%lld", &n); 21 | // 找n以内的平方数 22 | for (ll i = 1; i * i <= n; ++i) { 23 | ll a = i * i; 24 | printf("%lld ", a); 25 | } 26 | return 0; 27 | } 28 | -------------------------------------------------------------------------------- /洛谷/入门/P1887.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 15:19:22 PM 5 | * File Name : P1887.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int N, M; 18 | int main() { 19 | scanf("%d %d", &N, &M); 20 | int p = N / M; 21 | int r = N % M; 22 | 23 | for (int i = 1; i <= M - r; ++i) 24 | printf("%d ", p); 25 | for (int i = M - r + 1; i <= M; ++i) 26 | printf("%d ", p + 1); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /洛谷/入门/P1888.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-27 12:04:29 PM 5 | * File Name : P1888.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | std::vector vec; 19 | int main() { 20 | for (int i = 1; i <= 3; ++i) { 21 | ll a; 22 | scanf("%lld", &a); 23 | vec.push_back(a); 24 | } 25 | 26 | std::sort(vec.begin(), vec.end()); 27 | ll gcd = std::__gcd(vec[0], vec[2]); 28 | printf("%lld/%lld\n", vec[0] / gcd, vec[2] / gcd); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /洛谷/入门/P1897.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | const int N = 1e6 + 5; 4 | int a[N]; 5 | 6 | using namespace std; 7 | 8 | int main() { 9 | int n,i,time,high,s;//high表示最高楼层,s表示不重复楼层的数目 10 | cin>>n; 11 | for(i=0;i>a[i]; 13 | sort(a,a+n);//快排 14 | high=a[n-1];//最高楼层赋给high 15 | s=unique(a,a+n)-a;//计算不重复楼层的数目 16 | time=high*(4+6)+n;//每层上下4+6秒*最高层+总共要下电梯的人数*1s 17 | for(i=0;i 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int INF = 1e9; 19 | int n, ans = INF; 20 | int main() { 21 | scanf("%d", &n); 22 | for (int i = 1; i <= 3; ++i) { 23 | int number, price; 24 | scanf("%d %d", &number, &price); 25 | ans = std::min(ans, (int)(std::ceil(n * 1.0 / number) * price)); 26 | } 27 | printf("%d\n", ans); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/入门/P1917.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 21:06:36 PM 5 | * File Name : P1917.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | // 此题只需分析一下,就知道uim只要走到第1行第2格、第2行第1、3格,第3行第2格就必输。 19 | char A[10 + 5]; 20 | int cnt = 0; 21 | int main() { 22 | for (int i = 1; i <= 9; ++i) { 23 | std::cin >> A[i]; 24 | if (A[i] != '-') ++cnt; 25 | } 26 | if (A[2] == 'X' || A[4] == 'X' || A[6] == 'X' || A[8] == 'X') 27 | std::cout << "xiaoa will win." << std::endl; 28 | else 29 | std::cout << "Dont know." << std::endl; 30 | std::cout << cnt << std::endl; 31 | 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/P2006.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 14:21:34 PM 5 | * File Name : P2006.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | long long k, m, n; 18 | int main() { 19 | debug(); 20 | std::vector ans; 21 | 22 | scanf("%lld %lld %lld", &k, &m, &n); 23 | for (int i = 1; i <= m; ++i) { 24 | long long a, b; 25 | scanf("%lld %lld", &a, &b); 26 | if (a > 0) { 27 | if (k / a * b >= n) 28 | ans.push_back(i); 29 | } else if (a == 0) { 30 | if (b > 0) 31 | ans.push_back(i); 32 | } 33 | } 34 | for (const auto &ch: ans) { 35 | printf("%lld ", ch); 36 | } 37 | if (ans.empty()) printf("-1\n"); 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/入门/P2036.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-09 15:28:07 PM 5 | * File Name : P2036.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 10 + 5; 19 | int n, ans = 1e9, A1[N], A2[N]; 20 | // 遍历到第i位, 酸度为S, 甜度为B 21 | void dfs(int i, int S, int B) { 22 | if (i == n) { 23 | if (S == 1 && B == 0) return ; 24 | ans = std::min(ans, std::abs(S - B)); 25 | return ; 26 | } 27 | dfs(i + 1, S, B); 28 | dfs(i + 1, S * A1[i + 1], B + A2[i + 1]); 29 | } 30 | int main() { 31 | scanf("%d", &n); 32 | for (int i = 1; i <= n; ++i) { 33 | scanf("%d %d", &A1[i], &A2[i]); 34 | } 35 | dfs(0, 1, 0); 36 | printf("%d\n", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/入门/P2043.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-27 22:06:48 PM 5 | * File Name : P2043.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | // P ^ a 20 | std::map mp; 21 | void func(int x) { 22 | for (int i = 2; ; ++i) { 23 | if (x == 1) break; 24 | while (x % i == 0) { 25 | mp[i]++; 26 | x /= i; 27 | } 28 | } 29 | } 30 | int main() { 31 | scanf("%d", &n); 32 | for (int i = 2; i <= n; ++i) 33 | func(i); 34 | for (const auto &ch: mp) { 35 | int p = ch.first; 36 | int a = ch.second; 37 | printf("%d %d\n", p, a); 38 | } 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/入门/P2181.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 13:39:57 PM 5 | * File Name : P2181.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | unsigned long long n; 19 | int main() { 20 | scanf("%lld", &n); 21 | printf("%lld\n", n * (n -1) / 2 * (n - 2) / 3 * (n - 3) / 4); 22 | return 0; 23 | } 24 | -------------------------------------------------------------------------------- /洛谷/入门/P2192.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 12:19:41 PM 5 | * File Name : P2192.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, t5 = 0, t0 = 0; 19 | 20 | int main() { 21 | scanf("%d", &n); 22 | for (int i = 1; i <= n; ++i) { 23 | int x; 24 | scanf("%d", &x); 25 | if (x == 5) t5++; 26 | else t0++; 27 | } 28 | if (t0 == 0) printf("-1\n"); 29 | if (t5 < 9 && t0 >= 1) printf("0\n"); 30 | else { 31 | for (int i = 1; i <= t5 / 9 * 9; ++i) 32 | printf("5"); 33 | for (int i = 1; i <= t0; ++i) 34 | printf("0"); 35 | } 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/入门/P2241.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-21 12:18:06 PM 5 | * File Name : P2241.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n, m; 18 | long long square = 0, rectangle = 0; 19 | void count(int i, int j) { 20 | // 枚举左上角(i, j)可以构成的正方形个数 21 | int len = std::min(m - j + 1, n - i + 1); 22 | square += len; 23 | // 枚举左上角(i, j)可以构成的长方形个数 24 | rectangle += (m - j + 1) * (n - i + 1) - len; 25 | 26 | } 27 | int main() { 28 | scanf("%d %d", &n, &m); 29 | for (int i = 1; i <= n; ++i) { 30 | for (int j = 1; j <= m; ++j) { 31 | count(i, j); 32 | } 33 | } 34 | printf("%lld %lld\n", square, rectangle); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/入门/P2393.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-28 00:35:13 AM 5 | * File Name : P2393.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | long double ans = 0, tmp; 19 | int main() { 20 | while (scanf("%Lf", &tmp) != EOF) { 21 | ans += tmp * 1e6; 22 | } 23 | printf("%.5Lf", ans / 1e6); 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /洛谷/入门/P2415.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 17:25:25 PM 5 | * File Name : P2415.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | long long tmp, num=0, sum=0; 19 | int main() { 20 | while (std::cin >> tmp) {sum += tmp; num++;}//读入集合元素个数num和元素和sum 21 | std::cout << (long long)(sum * pow(2,num-1));//必须显式地转换为long long输出 22 | return 0; 23 | } 24 | -------------------------------------------------------------------------------- /洛谷/入门/P2524.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-11 21:15:21 PM 5 | * File Name : P2524.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 9 + 5; 19 | int n; 20 | char A[N]; 21 | 22 | int factor(int x) { 23 | if (x == 0 || x == 1) return 1; 24 | else return factor(x - 1) * x; 25 | } 26 | // 康托展开 27 | int cantor() { 28 | int ret = 0; 29 | for (int i = 1; i <= n; ++i) { 30 | int cnt = 0; 31 | for (int j = i + 1; j <= n; ++j) 32 | if (A[j] < A[i]) ++cnt; 33 | ret += cnt * factor(n - i); 34 | } 35 | return ret; 36 | } 37 | int main() { 38 | scanf("%d %s", &n, A + 1); 39 | printf("%d\n", cantor() + 1); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/入门/P2525.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | int n,a[10000]; 5 | 6 | int main() { 7 | cin>>n; 8 | for(int i=0;i>a[i]; 10 | if(prev_permutation(a,a+n)) //如果为真就输出数组 11 | for(int i=0;i 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, m; 19 | std::vector vec; 20 | int main() { 21 | scanf("%d %d", &n, &m); 22 | for (int i = 1; i <= m; ++i) { 23 | int x; 24 | scanf("%d", &x); 25 | vec.push_back(x); 26 | } 27 | std::sort(vec.begin(), vec.end()); 28 | int ans = 0, price; 29 | for (int i = 0; i < vec.size(); ++i) { 30 | if ((vec.size() - i) * vec[i] > ans) { 31 | price = vec[i]; 32 | ans = (vec.size() - i) * vec[i]; 33 | } 34 | } 35 | printf("%d %d\n", price, ans); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/入门/P2651.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-27 22:00:43 PM 5 | * File Name : P2651.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4 + 5; 19 | ll t, n, A[N]; 20 | 21 | int main() { 22 | scanf("%lld", &t); 23 | while (t--) { 24 | scanf("%lld", &n); 25 | for (int i = 1; i <= n; ++i) 26 | scanf("%lld", &A[i]); 27 | 28 | bool flag = false; 29 | for (int i = 1; i <= n; ++i) { 30 | if (i == 2) continue; 31 | ll gcd = std::__gcd(A[i], A[2]); 32 | A[2] /= gcd; 33 | if (A[2] == 1) { 34 | flag = true; 35 | break; 36 | } 37 | } 38 | if (flag) printf("Yes\n"); 39 | else printf("No\n"); 40 | } 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/入门/P2666.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 20:35:48 PM 5 | * File Name : P2666.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4; 19 | int n, cnt[N + 10]; 20 | void init() { 21 | for (int a = 0; a * a <= N; ++a) { 22 | for (int b = 0; b * b <= N; ++b) { 23 | if (a * a + b * b <= N) cnt[a * a + b * b]++; 24 | else break; 25 | } 26 | } 27 | } 28 | int main() { 29 | init(); 30 | scanf("%d", &n); 31 | int ans = 0; 32 | for (int c = 0; c * c <= n; ++c) { 33 | for (int d = 0; d * d <= n; ++d) { 34 | if (c * c + d * d <= n) ans += cnt[n - c * c - d * d]; 35 | else break; 36 | } 37 | } 38 | printf("%d\n", ans); 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/入门/P2669.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 11:14:13 AM 5 | * File Name : P2669.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int K; 19 | std::vector vec; 20 | void init() { 21 | vec.push_back(-1); 22 | for (int i = 1; i <= 1000; ++i) { 23 | for (int j = 1; j <= i; ++j) 24 | vec.push_back(i); 25 | } 26 | } 27 | int main() { 28 | init(); 29 | scanf("%d", &K); 30 | ll ans = 0; 31 | for (int i = 1; i <= K; ++i) 32 | ans += vec[i]; 33 | printf("%lld\n", ans); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/入门/P2676.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-26 23:42:40 PM 5 | * File Name : P2676.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e4 + 5; 19 | ll n, b, A[N]; 20 | 21 | int main() { 22 | scanf("%lld %lld", &n, &b); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%lld", &A[i]); 25 | } 26 | std::sort(A + 1, A + 1 + n, std::greater()); 27 | 28 | ll s = 0, ans = 0; 29 | for (int i = 1; i <= n; ++i) { 30 | s += A[i]; 31 | ++ans; 32 | if (s >= b) break; 33 | } 34 | printf("%lld\n", ans); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/入门/P2689.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 19:58:27 PM 5 | * File Name : P2689.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int x11, y11, x22, y22, T; 19 | int main() { 20 | scanf("%d %d %d %d %d", &x11, &y11, &x22, &y22, &T); 21 | int step = 0; 22 | for (int i = 1; i <= T; ++i) { 23 | if (x11 == x22 && y11 == y22) { 24 | printf("%d\n", step); 25 | return 0; 26 | } 27 | char tmp[5]; 28 | scanf("%s", tmp + 1); 29 | // 风吹向East 30 | if (tmp[1] == 'E' && y22 > y11) ++step, ++y11; 31 | else if (tmp[1] == 'W' && y11 > y22) ++step, --y11; 32 | else if (tmp[1] == 'N' && x22 > x11) ++step, ++x11; 33 | else if (tmp[1] == 'S' && x11 > x22) ++step, --x11; 34 | } 35 | printf("-1\n"); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/入门/P2705.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 11:24:46 AM 5 | * File Name : P2705.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int R, B, C, D, E; 19 | int main() { 20 | scanf("%d %d %d %d %d", &R, &B, &C, &D, &E); 21 | int cnt1 = C + D; 22 | int cnt2 = E + E; 23 | int ans; 24 | if (cnt1 >= cnt2) { 25 | ans = R * C + B * D; 26 | } else { 27 | if (R >= B) ans = B * (E + E) + (R - B) * C; 28 | else ans = R * (E + E) + (B - R) * D; 29 | } 30 | printf("%d\n", ans); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/入门/P2708.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-27 23:27:00 PM 5 | * File Name : P2708.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4 + 5; 19 | char A[N]; 20 | 21 | int main() { 22 | scanf("%s", A + 1); 23 | int ans = 0, len = std::strlen(A + 1); 24 | for (int i = 1; i <= len; ++i) { 25 | if (i == 1) continue; 26 | if (A[i] != A[i - 1]) ++ans; 27 | } 28 | if (A[len] == '0') ++ans; 29 | printf("%d\n", ans); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P2788.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-24 16:45:25 PM 5 | * File Name : P2788.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int ans = 0; 18 | 19 | int main() { 20 | debug(); 21 | int a; 22 | while (std::cin >> a) 23 | ans += a; 24 | printf("%d\n", ans); 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /洛谷/入门/P2907.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 21:54:37 PM 5 | * File Name : P2907.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll n, k; 19 | // x头牛, 最终将会有多少群奶牛在平静地吃草 20 | ll dfs(ll x) { 21 | ll x1 = (x + k) / 2; 22 | ll x2 = (x - x1); 23 | if (x1 + x2 == x && x1 - x2 == k && x1 > 0 && x2 > 0) return dfs(x1) + dfs(x2); 24 | else return 1; 25 | } 26 | int main() { 27 | scanf("%lld %lld", &n, &k); 28 | ll ret = dfs(n); 29 | printf("%lld\n", ret); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P2911.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-11 21:58:45 PM 5 | * File Name : P2911.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 20 + 20 + 40 + 5; 19 | int A[N], s1, s2, s3; 20 | 21 | int main() { 22 | scanf("%d %d %d", &s1, &s2, &s3); 23 | for (int i = 1; i <= s1; ++i) { 24 | for (int j = 1; j <= s2; ++j) { 25 | for (int k = 1; k <= s3; ++k) { 26 | A[i + j + k]++; 27 | } 28 | } 29 | } 30 | int maxNumber = 0; 31 | for (int i = 1; i <= N - 2; ++i) { 32 | maxNumber = std::max(maxNumber, A[i]); 33 | } 34 | for (int i = 1; i <= N - 2; ++i) 35 | if (A[i] == maxNumber) { 36 | printf("%d\n", i); 37 | break; 38 | } 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/入门/P2955.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-11 22:03:07 PM 5 | * File Name : P2955.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e6 + 5; 19 | int n; 20 | char tmp[N]; 21 | 22 | int main() { 23 | scanf("%d", &n); 24 | for (int i = 1; i <= n; ++i) { 25 | scanf("%s", tmp + 1); 26 | if ((tmp[std::strlen(tmp + 1)] - '0') % 2 == 0) printf("even\n"); 27 | else printf("odd\n"); 28 | } 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /洛谷/入门/P2956.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | bool t[250][250];//开个数组,方便记录耕田的情况。 4 | 5 | int main(){ 6 | int i,x,y,n,j,s=0,a,b,c,d; 7 | scanf("%d %d %d",&x,&y,&n); 8 | while(n--){ //在线,边读边做。 9 | scanf("%d %d %d %d",&a,&b,&c,&d); 10 | for(i=a;i<=c;i++) 11 | for(j=b;j<=d;j++) 12 | t[i][j]=1;//把处于在耕田的长方形里的面积,用“1”把全部都记录下来。 13 | } 14 | for(i=1;i<=x;i++) 15 | for(j=1;j<=y;j++) 16 | if(t[i][j]) s++;//因为是在主函数外开的数组,所以初始值都是0。是一的就s++,把耕过的田的总数给算出来 17 | printf("%d\n",s);//输出。 18 | return 0; 19 | } 20 | -------------------------------------------------------------------------------- /洛谷/入门/P3150.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-26 22:14:20 PM 5 | * File Name : P3150.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | int n; 18 | // 拿到偶数的状态必胜 19 | // 拿到奇数的状态必败 20 | int main() { 21 | scanf("%d", &n); 22 | for (int i = 1; i <= n; ++i) { 23 | int a; 24 | scanf("%d", &a); 25 | if (a & 1) printf("zs wins\n"); 26 | else printf("pb wins\n"); 27 | } 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/入门/P3717.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 16:53:33 PM 5 | * File Name : P3717.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | int n, m, r; 20 | int vis[N][N]; 21 | 22 | int main() { 23 | scanf("%d %d %d", &n, &m, &r); 24 | for (int i = 1; i <= m; ++i) { 25 | int x, y; 26 | scanf("%d %d", &x, &y); 27 | for (int k1 = 1; k1 <= n; ++k1) { 28 | for (int k2 = 1; k2 <= n; ++k2) { 29 | if ((x - k1) * (x - k1) + (y - k2) * (y - k2) <= r * r) 30 | vis[k1][k2] = 1; 31 | } 32 | } 33 | } 34 | int ans = 0; 35 | for (int k1 = 1; k1 <= n; ++k1) 36 | for (int k2 = 1; k2 <= n; ++k2) 37 | if (vis[k1][k2]) 38 | ++ans; 39 | printf("%d\n", ans); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/入门/P3741.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 17:03:17 PM 5 | * File Name : P3741.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | int n; 20 | char A[N]; 21 | bool vis[N]; 22 | 23 | int main() { 24 | scanf("%d %s", &n, A + 1); 25 | int ans = 0; 26 | for (int i = 1; i <= strlen(A + 1); ++i) { 27 | if (i == 1) continue; 28 | else { 29 | if (A[i] == 'K' && A[i - 1] == 'V' && vis[i] == false && vis[i - 1] == false) 30 | ++ans, vis[i] = true, vis[i - 1] = true; 31 | } 32 | } 33 | for (int i = 1; i <= strlen(A + 1); ++i) { 34 | if (i == 1) continue; 35 | else { 36 | if (A[i] == A[i - 1] && vis[i] == false && vis[i - 1] == false) { 37 | ++ans; 38 | break; 39 | } 40 | } 41 | } 42 | printf("%d\n", ans); 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/入门/P3742.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-26 23:00:26 PM 5 | * File Name : P3742.cc 6 | */ 7 | 8 | #include 9 | 10 | void debug() { 11 | #ifdef Acui 12 | freopen("data.in", "r", stdin); 13 | freopen("data.out", "w", stdout); 14 | #endif 15 | } 16 | 17 | const int N = 1e2 + 5; 18 | int n; 19 | char x[N], y[N], z[N]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | scanf("%s %s", x + 1, y + 1); 24 | for (int i = 1; i <= n; ++i) { 25 | if (y[i] > x[i]) { 26 | printf("-1\n"); 27 | return 0; 28 | } else 29 | z[i] = y[i]; 30 | } 31 | printf("%s", z + 1); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/P3954.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-26 23:37:39 PM 5 | * File Name : P3954.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int A, B, C; 19 | int main() { 20 | scanf("%d %d %d", &A, &B, &C); 21 | printf("%d\n", (int)(A * 0.2 + B * 0.3 + C * 0.5)); 22 | return 0; 23 | } 24 | -------------------------------------------------------------------------------- /洛谷/入门/P4325.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-10 21:12:47 PM 5 | * File Name : P4325.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | std::set st; 19 | int main() { 20 | for (int i = 1; i <= 10; ++i) { 21 | int x; 22 | scanf("%d", &x); 23 | st.insert(x % 42); 24 | } 25 | printf("%d\n", (int)st.size()); 26 | return 0; 27 | } 28 | -------------------------------------------------------------------------------- /洛谷/入门/P4445.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-02-26 23:22:23 PM 5 | * File Name : P4445.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | int main() { 20 | scanf("%d", &n); 21 | ll ans = 0, pre; 22 | for (int i = 1; i <= n; ++i) { 23 | ll a; 24 | scanf("%lld", &a); 25 | 26 | if (i == 1) { 27 | pre = a; 28 | continue; 29 | } 30 | ans += std::max(pre, a); 31 | pre = a; 32 | } 33 | printf("%lld\n", ans); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/入门/P4702.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | const int maxN=105; //n最大是100,maxN开的稍微大一点就行 6 | int n, a[maxN]; 7 | long long sum=0; 8 | //上面是定义的常量和变量 9 | 10 | int main() { 11 | scanf("%d", &n); 12 | for(int i=1; i<=n; i++) { 13 | scanf("%d", &a[i]); 14 | sum+=a[i]; //累加就行,你如果用前缀和a数组就不能开整型了 15 | } 16 | if(sum&1) printf("Alice"); //if语句中用的是位运算,通俗理解就是判断sum是否为奇数 17 | //如果sum是奇数输出Alice 18 | else printf("Bob"); //反之输出Bob 19 | return 0; 20 | } 21 | -------------------------------------------------------------------------------- /洛谷/入门/P5015.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 14:37:28 PM 5 | * File Name : P5015.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | char A[N]; 20 | 21 | int main() { 22 | fgets(A + 1, N - 2, stdin); 23 | int ans = 0; 24 | for (int i = 1; i <= std::strlen(A + 1) - 1; ++i) 25 | if (A[i] != ' ') ++ans; 26 | printf("%d\n", ans); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /洛谷/入门/P5082.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 14:28:13 PM 5 | * File Name : P5082.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e7 + 5; 19 | int n; 20 | double A[N], B[N]; 21 | 22 | int main() { 23 | scanf("%d", &n); 24 | double sum_1 = 0, sum_2 = 0, sum_3 = 0; 25 | for (int i = 1; i <= n; ++i) 26 | scanf("%lf", &A[i]), sum_1 += A[i]; 27 | for (int i = 1; i <= n; ++i) 28 | scanf("%lf", &B[i]), sum_2 += B[i], sum_3 += (A[i] - B[i]); 29 | printf("%.6lf\n", (sum_1 * 3 - sum_2 * 2) * 1.0 / sum_3); 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/P5660.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-11 22:27:32 PM 5 | * File Name : P5660.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 8 + 5; 19 | char A[N]; 20 | 21 | int main() { 22 | scanf("%s", A + 1); 23 | int cnt = 0; 24 | for (int i = 1; i <= 8; ++i) 25 | if (A[i] == '1') ++cnt; 26 | printf("%d\n", cnt); 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /洛谷/入门/cpp01.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-21 00:48:23 AM 5 | * File Name : cpp01.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | class Text { 19 | public: 20 | explicit Text(char *p) { 21 | text = p; 22 | } 23 | Text(const Text& rhs); 24 | Text& operator=(const Text& rhs); 25 | 26 | const char& operator[](std::size_t pos) const { 27 | std::cout << "do const" << std::endl; 28 | return text[pos]; 29 | } 30 | char& operator[](std::size_t pos) { 31 | std::cout << "non-const" << std::endl; 32 | return const_cast(static_cast(*this)[pos]); 33 | } 34 | private: 35 | char *text; 36 | }; 37 | 38 | int main() { 39 | char *p = "text"; 40 | Text obj(p); 41 | std::cout << obj[2] << std::endl; 42 | 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/入门/cpp02.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-21 00:48:31 AM 5 | * File Name : cpp02.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | class Widget { 19 | public: 20 | Widget() { 21 | std::cout << "ctorrrrrr" << std::endl; 22 | } 23 | Widget(int a, int b) { 24 | std::cout << "ctor1" << std::endl; 25 | a_ = a; 26 | b_ = b; 27 | } 28 | void print() { 29 | std::cout << "a: " << a_ << std::endl; 30 | std::cout << "b: " << b_ << std::endl; 31 | } 32 | private: 33 | int a_; 34 | int b_; 35 | std::string s_; 36 | }; 37 | 38 | int main() { 39 | Widget w(10, 12); 40 | w.print(); 41 | 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/入门/cpp04.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-21 18:17:53 PM 5 | * File Name : cpp04.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | template 19 | class Widget { 20 | public: 21 | Widget(std::string& name, const T& value): name_(name), value_(value) { 22 | 23 | } 24 | private: 25 | std::string& name_; 26 | const T value_; 27 | }; 28 | 29 | int main() { 30 | std::string s("abc"); 31 | Widget w1(s, 5); 32 | Widget w2(s, 5); 33 | w2 = w1; 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/入门/cpp05.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-21 18:43:37 PM 5 | * File Name : cpp05.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | class Base { 19 | public: 20 | Base() { 21 | std::cout << "ctor base" << std::endl; 22 | } 23 | virtual ~Base() { 24 | std::cout << "dtor base" << std::endl; 25 | } 26 | }; 27 | 28 | class Derived: public Base { 29 | public: 30 | Derived() { 31 | std::cout << "ctor derived" << std::endl; 32 | } 33 | virtual ~Derived() { 34 | std::cout << "dtor derived" << std::endl; 35 | } 36 | }; 37 | 38 | Derived* factory() { 39 | return new Derived(); 40 | } 41 | int main() { 42 | Derived* b = factory(); 43 | delete b; 44 | 45 | std::cout << "======" << std::endl; 46 | return 0; 47 | } 48 | -------------------------------------------------------------------------------- /洛谷/入门/cpp06.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-23 22:59:16 PM 5 | * File Name : cpp06.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | class Widget { 19 | public: 20 | Widget(const int &a): a_(a) { 21 | std::cout << "ctor" << std::endl; 22 | } 23 | public: 24 | ~Widget() { 25 | std::cout << "dctor" << std::endl; 26 | } 27 | public: 28 | int a_; 29 | }; 30 | 31 | Widget* get_factory() { 32 | return new Widget(1); 33 | } 34 | 35 | int main() { 36 | Widget* p = get_factory(); 37 | delete p; 38 | std::cout << "========" << std::endl; 39 | 40 | { 41 | std::shared_ptr w(get_factory()); // RAII 42 | } 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/入门/cpp08.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-24 12:28:13 PM 5 | * File Name : cpp08.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | class Person { 19 | public: 20 | Person() { 21 | std::cout << "person" << std::endl; 22 | } 23 | private: 24 | std::string name_; 25 | }; 26 | 27 | class Student: public Person { 28 | public: 29 | Student() { 30 | std::cout << "student" << std::endl; 31 | } 32 | private: 33 | std::string schoolName_; 34 | }; 35 | 36 | int main() { 37 | Student s; 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/入门/cpp09.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-31 13:58:21 PM 5 | * File Name : cpp09.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | void outOfMem() { 19 | std::cerr << "\nUnable to satisfy request for memory\n"; 20 | std::abort(); 21 | } 22 | 23 | int main() { 24 | std::set_new_handler(outOfMem); 25 | auto it = new int[1000000000000LL]; 26 | return 0; 27 | } 28 | -------------------------------------------------------------------------------- /洛谷/入门/cpp10.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-03 20:50:14 PM 5 | * File Name : cpp10.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int main() { 19 | int a = 10; 20 | decltype((a)) b = a; 21 | 22 | std::cout << a << std::endl; 23 | std::cout << b << std::endl; 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /洛谷/入门/cpp11.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-08 23:16:26 PM 5 | * File Name : cpp11.cc 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | #define ll long long 12 | void debug() { 13 | #ifdef Acui 14 | freopen("data.in", "r", stdin); 15 | freopen("data.out", "w", stdout); 16 | #endif 17 | } 18 | 19 | int main() { 20 | std::thread t([](){ 21 | std::cout << "hello world, concurrency" << std::endl; 22 | }); 23 | t.join(); 24 | std::cout << "another" << std::endl; 25 | // t.join(); 26 | std::thread t2; 27 | t2.join(); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/入门/cpp13.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-13 11:53:36 AM 5 | * File Name : cpp13.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | void print(int &x) { 19 | x++; 20 | } 21 | int main() { 22 | int x = 101; 23 | print(std::ref(x)); 24 | printf("%d\n", x); 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /洛谷/入门/cpp14.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-13 15:13:07 PM 5 | * File Name : cpp14.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int main() { 19 | unsigned int n = std::thread::hardware_concurrency(); 20 | std::cout << n << " concurrent threads are supported.\n"; 21 | } 22 | -------------------------------------------------------------------------------- /洛谷/入门/cpp15.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-13 15:19:18 PM 5 | * File Name : cpp15.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | void thread_task(int n) { 19 | std::this_thread::sleep_for(std::chrono::seconds(n)); 20 | std::cout << "hello thread " 21 | << std::this_thread::get_id() 22 | << " paused " << n << " seconds" << std::endl; 23 | } 24 | 25 | int main(int argc, const char *argv[]) { 26 | std::thread threads[5]; 27 | std::cout << "Spawning 5 threads...\n"; 28 | for (int i = 0; i < 5; i++) { 29 | threads[i] = std::thread(thread_task, i + 1); 30 | } 31 | std::cout << "Done spawning threads! Now wait for them to join\n"; 32 | for (auto& t: threads) { 33 | t.join(); 34 | } 35 | std::cout << "All threads joined.\n"; 36 | 37 | return EXIT_SUCCESS; 38 | } /* ---------- end of function main ---------- */ 39 | -------------------------------------------------------------------------------- /洛谷/入门/cpp16.cc: -------------------------------------------------------------------------------- 1 | #include // std::cout 2 | #include // std::thread 3 | #include // std::mutex 4 | 5 | // volatile int counter(0); // non-atomic counter 6 | int counter(0); 7 | std::mutex mtx; // locks access to counter 8 | 9 | void attempt_10k_increases() { 10 | for (int i=0; i<10000; ++i) { 11 | if (mtx.try_lock()) { // only increase if currently not locked: 12 | ++counter; 13 | mtx.unlock(); 14 | } 15 | } 16 | } 17 | 18 | int main (int argc, const char* argv[]) { 19 | std::thread threads[10]; 20 | for (int i=0; i<10; ++i) 21 | threads[i] = std::thread(attempt_10k_increases); 22 | 23 | for (auto& th : threads) th.join(); 24 | std::cout << counter << " successful increases of the counter.\n"; 25 | 26 | return 0; 27 | } 28 | 29 | -------------------------------------------------------------------------------- /洛谷/入门/cpp17.cc: -------------------------------------------------------------------------------- 1 | #include // std::cout 2 | #include // std::chrono::milliseconds 3 | #include // std::thread 4 | #include // std::timed_mutex 5 | 6 | std::timed_mutex mtx; 7 | 8 | void fireworks() { 9 | // waiting to get a lock: each thread prints "-" every 200ms: 10 | while (!mtx.try_lock_for(std::chrono::milliseconds(200))) { 11 | std::cout << "-"; 12 | } 13 | // got a lock! - wait for 1s, then this thread prints "*" 14 | std::this_thread::sleep_for(std::chrono::milliseconds(1000)); 15 | std::cout << "*\n"; 16 | mtx.unlock(); 17 | } 18 | 19 | int main () { 20 | std::thread threads[10]; 21 | // spawn 10 threads: 22 | for (int i=0; i<10; ++i) 23 | threads[i] = std::thread(fireworks); 24 | 25 | for (auto& th : threads) th.join(); 26 | 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /洛谷/入门/cpp18.cc: -------------------------------------------------------------------------------- 1 | #include // std::cout 2 | #include // std::thread 3 | #include // std::mutex, std::lock_guard 4 | #include // std::logic_error 5 | 6 | std::mutex mtx; 7 | 8 | void print_even (int x) { 9 | if (x%2==0) std::cout << x << " is even\n"; 10 | else throw (std::logic_error("not even")); 11 | } 12 | 13 | void print_thread_id (int id) { 14 | try { 15 | // using a local lock_guard to lock mtx guarantees unlocking on destruction / exception: 16 | std::lock_guard lck (mtx); 17 | print_even(id); 18 | } 19 | catch (std::logic_error&) { 20 | std::cout << "[exception caught]\n"; 21 | } 22 | } 23 | 24 | int main () { 25 | std::thread threads[10]; 26 | // spawn 10 threads: 27 | for (int i=0; i<10; ++i) 28 | threads[i] = std::thread(print_thread_id,i+1); 29 | 30 | for (auto& th : threads) th.join(); 31 | 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/cpp19.cc: -------------------------------------------------------------------------------- 1 | #include // std::cout 2 | #include // std::thread 3 | #include // std::mutex, std::unique_lock 4 | 5 | std::mutex mtx; // mutex for critical section 6 | 7 | void print_block (int n, char c) { 8 | // critical section (exclusive access to std::cout signaled by lifetime of lck): 9 | std::unique_lock lck (mtx); 10 | for (int i=0; i 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | struct A { 19 | 20 | }; 21 | 22 | // constexpr 是 C++11 中的新关键字) 23 | constexpr A a {}; 24 | 25 | int main() { 26 | throw a; 27 | int b {2222}; 28 | std::cout << "b: " << b << std::endl; 29 | std::cout << "empyt class size: " << (int)(sizeof a) << std::endl; 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /洛谷/入门/cpp22.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-13 22:53:26 PM 5 | * File Name : cpp22.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | std::mutex mtx1, mtx2; 19 | 20 | int task() { 21 | std::cout << "before" << std::endl; 22 | std::lock(mtx1, mtx2); 23 | std::lock(mtx1, mtx2); 24 | std::cout << "after" << std::endl; 25 | return -1; 26 | } 27 | 28 | int main() { 29 | std::thread t(task); 30 | t.join(); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/入门/cpp24.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-14 17:07:23 PM 5 | * File Name : cpp24.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | // a non-optimized way of checking for prime numbers: 19 | bool is_prime(ll x) { 20 | for (ll i = 2; i < x; ++i) 21 | if (x % i == 0) 22 | return false; 23 | return true; 24 | } 25 | 26 | int main() { 27 | // call function asynchronously: 28 | std::future < bool > fut = std::async(is_prime, 444444443LL); 29 | 30 | std::cout << "go on" << std::endl; 31 | // do something while waiting for function to set future: 32 | std::cout << "checking, please wait" << std::endl; 33 | 34 | bool x = fut.get(); // retrieve return value 35 | 36 | std::cout << "\n444444443 " << (x ? "is" : "is not") << " prime.\n"; 37 | 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/入门/cpp27.cc: -------------------------------------------------------------------------------- 1 | // condition_variable::wait (with predicate) 2 | #include // std::cout 3 | #include // std::thread, std::this_thread::yield 4 | #include // std::mutex, std::unique_lock 5 | #include // std::condition_variable 6 | 7 | std::mutex mtx; 8 | std::condition_variable cv; 9 | 10 | int cargo = 0; 11 | bool shipment_available() {return cargo!=0;} 12 | 13 | void consume (int n) { 14 | for (int i=0; i lck(mtx); 16 | cv.wait(lck,shipment_available); 17 | // consume: 18 | std::cout << " cargo: " << cargo << '\n'; 19 | cargo=0; 20 | } 21 | } 22 | 23 | int main () 24 | { 25 | std::thread consumer_thread (consume,10); 26 | 27 | // produce 10 items when needed: 28 | for (int i=0; i<10; ++i) { 29 | while (shipment_available()) std::this_thread::yield(); 30 | std::unique_lock lck(mtx); 31 | cargo = i+1; 32 | cv.notify_one(); 33 | } 34 | 35 | consumer_thread.join(); 36 | 37 | return 0; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /洛谷/入门/cpp30.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-20 22:20:52 PM 5 | * File Name : cpp30.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | typedef enum memory2 { 19 | memory_order_relaxed, 20 | memory_order_consume, 21 | memory_order_acquire, 22 | memory_order_release, 23 | memory_order_acq_rel, 24 | memory_order_seq_cst 25 | } memory1, memory_order; 26 | 27 | int main() { 28 | memory_order m1; 29 | std::cout << m1 << std::endl; 30 | 31 | memory_order m2 = memory_order::memory_order_seq_cst; 32 | std::cout << m2 << std::endl; 33 | 34 | memory1 a; 35 | memory2 b; 36 | memory_order c; 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/入门/cpp31.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-21 00:17:04 AM 5 | * File Name : cpp31.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | std::atomic counter = {0}; 19 | int main() { 20 | std::vector vt; 21 | for (int i = 0; i < 100; ++i) { 22 | vt.emplace_back([](){ 23 | counter.fetch_add(1, std::memory_order_relaxed); 24 | }); 25 | } 26 | 27 | for (auto& t : vt) { 28 | t.join(); 29 | } 30 | std::cout << "current counter:" << counter << std::endl; 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/入门/cpp33.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-23 10:47:59 AM 5 | * File Name : cpp33.cc 6 | */ 7 | 8 | #include 9 | 10 | std::condition_variable cond; 11 | std::mutex print_mutex; 12 | int flag = 0; 13 | 14 | void print_thread(int num) 15 | { 16 | for (int i = 0; i < 10; i++) 17 | { 18 | std::unique_lock lk(print_mutex); 19 | cond.wait(lk, [&]() { return num == flag; }); 20 | std::cout << char('A' + num); 21 | flag = (flag + 1) % 3; 22 | cond.notify_all(); 23 | } 24 | } 25 | 26 | int main() { 27 | std::thread t1(print_thread, 1); 28 | std::thread t2(print_thread, 2); 29 | print_thread(0); 30 | t1.join(); 31 | t2.join(); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/入门/cpp34.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-23 14:42:35 PM 5 | * File Name : cpp34.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int main() { 19 | std::string str = R"(C:\File\To\Path)"; 20 | std::cout << str << std::endl; 21 | return 0; 22 | } 23 | -------------------------------------------------------------------------------- /洛谷/入门/test.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-23 18:45:04 PM 5 | * File Name : test.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | struct A { 19 | int a; 20 | }; 21 | 22 | std::map mp; 23 | int main() { 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /洛谷/提高-/644A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-24 21:39:59 PM 5 | * File Name : 644A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int t; 19 | 20 | int main() { 21 | scanf("%d", &t); 22 | while (t--) { 23 | int a, b, mi = 1e9; 24 | scanf("%d %d", &a, &b); 25 | if ((a + a) * (a + a) >= (a * b * 2)) 26 | mi = std::min(mi, (a + a) * (a + a)); 27 | if ((a + b) * (a + b) >= (a * b * 2)) 28 | mi = std::min(mi, (a + b) * (a + b)); 29 | if ((b + a) * (b + a) >= (a * b * 2)) 30 | mi = std::min(mi, (b + a) * (b + a)); 31 | if ((b + b) * (b + b) >= (a * b * 2)) 32 | mi = std::min(mi, (b + b) * (b + b)); 33 | if (a * a >= (a * b * 2)) 34 | mi = std::min(mi, a * a); 35 | if (b * b >= (a * b * 2)) 36 | mi = std::min(mi, b * b); 37 | printf("%d\n", mi); 38 | } 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/提高-/644B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-24 22:05:10 PM 5 | * File Name : 644B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 50 + 5; 19 | int t, n, A[N]; 20 | 21 | int main() { 22 | scanf("%d", &t); 23 | while (t--) { 24 | scanf("%d", &n); 25 | for (int i = 1; i <= n; ++i) { 26 | scanf("%d", &A[i]); 27 | } 28 | std::sort(A + 1, A + 1 + n); 29 | int mi = 1e9; 30 | for (int i = 1; i <= n - 1; ++i) { 31 | mi = std::min(mi, std::abs(A[i] - A[i + 1])); 32 | } 33 | printf("%d\n", mi); 34 | } 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/提高-/644D.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-24 22:33:06 PM 5 | * File Name : 644D.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll t, n, k; 19 | int main() { 20 | scanf("%lld", &t); 21 | while (t--) { 22 | scanf("%lld %lld", &n, &k); 23 | ll mi = 1e9; 24 | for (ll i = 1; 1LL * i * i <= n; ++i) { 25 | ll a = i, b = n / a; 26 | if (a * b == n) { 27 | if (a <= k) mi = std::min(mi, b); 28 | if (b <= k) mi = std::min(mi, a); 29 | } 30 | } 31 | printf("%lld\n", mi); 32 | } 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /洛谷/提高-/CF387C.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-25 17:29:10 PM 5 | * File Name : CF387C.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | char A[N]; 20 | int n; 21 | 22 | // 从start开始找到x000...000这样的数, x不为0后面跟零 23 | int find(int start) { 24 | if (start > n) return -1; 25 | 26 | int i; 27 | for (i = start + 1; i <= n; ++i) { 28 | if (A[i] != '0') break; 29 | } 30 | return i - 1; 31 | } 32 | int main() { 33 | scanf("%s", A + 1); 34 | n = std::strlen(A + 1); 35 | int x = find(1); 36 | int ans = 1; 37 | 38 | for (int y = find(x + 1); y <= n && y != -1; y = find(x + 1)) { 39 | if (x > y - x || (x == y - x && A[1] >= A[x + 1])) ++ans; 40 | else ans = 1; 41 | // 合并 42 | x = y; 43 | } 44 | printf("%d", ans); 45 | return 0; 46 | } 47 | -------------------------------------------------------------------------------- /洛谷/提高-/CF449A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-24 18:08:29 PM 5 | * File Name : CF449A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll n, m, k; 19 | 20 | int main() { 21 | scanf("%lld %lld %lld", &n, &m, &k); 22 | if (k > n + m - 2) { 23 | printf("-1\n"); 24 | return 0; 25 | } 26 | 27 | ll ans = 0; 28 | if (k <= n - 1) { 29 | ans = std::max(ans, m * (n / (k + 1))); 30 | } else { 31 | ans = std::max(ans, (m / (k - (n - 1) + 1)) * 1); 32 | } 33 | 34 | if (k <= m - 1) { 35 | ans = std::max(ans, n * (m / (k + 1))); 36 | } else { 37 | ans = std::max(ans, (n / (k - (m - 1) + 1)) * 1); 38 | } 39 | printf("%lld\n", ans); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/提高-/CF559A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-24 18:03:45 PM 5 | * File Name : CF559A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll a, b, c, d, e, f; 19 | 20 | int main() { 21 | scanf("%lld %lld %lld %lld %lld %lld", &a, &b, &c, &d, &e, &f); 22 | ll ans = (c + d + e) * (c + d + e) - a * a - c * c - e * e; 23 | printf("%lld\n", ans); 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /洛谷/提高-/CF701C.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-24 18:28:04 PM 5 | * File Name : CF701C.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n; 20 | char A[N]; 21 | 22 | std::set st; 23 | std::map mp; 24 | 25 | int main() { 26 | scanf("%d %s", &n, A + 1); 27 | for (int i = 1; i <= n; ++i) { 28 | st.insert(A[i]); 29 | } 30 | int len = st.size(), L = 1, R = 0, ans = n; 31 | 32 | for (int i = 1; i <= n; ++i) { 33 | ++mp[A[i]]; 34 | ++R; 35 | while (L <= R && mp.size() == len) { 36 | ans = std::min(ans, R - L + 1); 37 | mp[A[L]]--; 38 | if (mp[A[L]] == 0) mp.erase(A[L]); 39 | ++L; 40 | } 41 | } 42 | printf("%d\n", ans); 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/提高-/P1017.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-21 10:21:12 AM 5 | * File Name : P1017.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, base; 19 | std::vector vec; 20 | 21 | void solve() { 22 | while (n) { 23 | int remainder = n % base; 24 | // n /= base; 25 | // if (remainder < 0) remainder -= base, n += 1; 26 | if (remainder < 0) remainder -= base; 27 | n = (n - remainder) / base; 28 | if (remainder >= 10) vec.push_back(remainder - 10 + 'A'); 29 | else vec.push_back(remainder + '0'); 30 | } 31 | } 32 | int main() { 33 | std::cin >> n >> base; 34 | std::cout << n << "="; 35 | solve(); 36 | std::reverse(vec.begin(), vec.end()); 37 | for (int i = 0; i < vec.size(); ++i) 38 | std::cout << vec[i]; 39 | std::cout << "(base" << base << ")"; 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/提高-/P1057.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-25 13:45:36 PM 5 | * File Name : P1057.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 30 + 5; 19 | int n, m, dp[N][N]; 20 | 21 | // 在编号为i的位置, 还要传j次 22 | int dfs(int i, int j) { 23 | // 递归的边界 24 | if (j == 0) { 25 | return i == 0? 1: 0; 26 | } 27 | // 剪枝 + 记忆化 28 | if (j < std::min(i, n - i)) return dp[i][j] = 0; 29 | if (dp[i][j] != -1) return dp[i][j]; 30 | 31 | int ret = 0; 32 | // 往左 33 | ret += dfs((i - 1 + n) % n, j - 1); 34 | // 往右 35 | ret += dfs((i + 1) % n, j - 1); 36 | return dp[i][j] = ret; 37 | } 38 | int main() { 39 | scanf("%d %d", &n, &m); 40 | std::memset(dp, -1, sizeof dp); 41 | printf("%d", dfs(0, m)); 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/提高-/P1062.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-21 17:36:59 PM 5 | * File Name : P1062.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll k, n; 19 | std::vector vec; 20 | // 将x转成二进制 21 | void solve(int x) { 22 | while (x) { 23 | int r = x % 2; 24 | x /= 2; 25 | vec.push_back(r); 26 | } 27 | } 28 | int main() { 29 | std::cin >> k >> n; 30 | solve(n); 31 | ll ans = 0; 32 | for (int i = 0; i < vec.size(); ++i) 33 | ans += vec[i] * std::pow(k, i); 34 | std::cout << ans << std::endl; 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/提高-/P1077.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-25 11:49:18 AM 5 | * File Name : P1077.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | const int MOD = 1000007; 20 | int n, m, A[N], dp[N][N]; 21 | 22 | // 前i种花, 排成一排共j盆时的方案数 23 | int dfs(int i, int j) { 24 | // 递归的边界 25 | if (i == 0) { 26 | return j == 0? 1: 0; 27 | } 28 | if (dp[i][j] != -1) { 29 | return dp[i][j]; 30 | } 31 | int ret = 0; 32 | // 枚举第i盆花 33 | for (int k = 0; k <= A[i]; ++k) { 34 | if (j - k >= 0) 35 | ret = (ret + dfs(i - 1, j - k)) % MOD; 36 | } 37 | return dp[i][j] = ret; 38 | } 39 | int main() { 40 | scanf("%d %d", &n, &m); 41 | for (int i = 1; i <= n; ++i) { 42 | scanf("%d", &A[i]); 43 | } 44 | std::memset(dp, -1, sizeof dp); 45 | printf("%d\n", dfs(n, m)); 46 | return 0; 47 | } 48 | -------------------------------------------------------------------------------- /洛谷/提高-/P1088.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-23 11:58:37 AM 5 | * File Name : P1088.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4 + 5; 19 | int n, m, A[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &m); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | while (m--) { 27 | std::next_permutation(A + 1, A + 1 + n); 28 | } 29 | for (int i = 1; i <= n; ++i) { 30 | printf("%d ", A[i]); 31 | } 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/提高-/P1154-tle.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-28 12:28:57 PM 5 | * File Name : P1154.c 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 5e3 + 5; 19 | int n, A[N]; 20 | 21 | bool valid(int k) { 22 | std::set st; 23 | for (int i = 1; i <= n; ++i) { 24 | if (st.count(A[i] % k) != 0) return false; 25 | st.insert(A[i] % k); 26 | } 27 | return st.size() == n; 28 | } 29 | int main() { 30 | scanf("%d", &n); 31 | for (int i = 1; i <= n; ++i) { 32 | scanf("%d", &A[i]); 33 | } 34 | // 枚举可能的k, 至少有n个 35 | for (int k = n; ; ++k) { 36 | if (valid(k)) { 37 | printf("%d\n", k); 38 | break; 39 | } 40 | } 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/提高-/P1154.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-28 12:28:57 PM 5 | * File Name : P1154.c 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e6 + 5; 19 | int n, A[N]; 20 | bool vis[N]; 21 | 22 | bool valid(int k) { 23 | // 注意是k, 2 * k, 3 * k, ... 24 | for (int i = k; i < N; i += k) { 25 | if (vis[i]) return false; 26 | } 27 | return true; 28 | } 29 | int main() { 30 | scanf("%d", &n); 31 | for (int i = 1; i <= n; ++i) { 32 | scanf("%d", &A[i]); 33 | } 34 | // 预处理 35 | for (int i = 1; i <= n; ++i) { 36 | for (int j = i + 1; j <= n; ++j) { 37 | int index = std::abs(A[i] - A[j]); 38 | vis[index] = true; 39 | } 40 | } 41 | 42 | // 枚举可能的k, 至少有n个 43 | for (int k = n; ; ++k) { 44 | if (valid(k)) { 45 | printf("%d\n", k); 46 | break; 47 | } 48 | } 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /洛谷/提高-/P1229.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-28 12:51:19 PM 5 | * File Name : P1229.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e6; 19 | char strA[N], strB[N]; 20 | 21 | int main() { 22 | scanf("%s %s", strA + 1, strB + 1); 23 | int ans = 1; 24 | for (int i = 1; i <= std::strlen(strA + 1); ++i) { 25 | for (int j = 1; j <= std::strlen(strB + 1); ++j) { 26 | if (i + 1 <= std::strlen(strA + 1) && j - 1 >= 1 && strA[i] == strB[j] && strA[i + 1] == strB[j - 1]) 27 | ans *= 2; 28 | } 29 | } 30 | printf("%d\n", ans); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/提高-/P1440.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : xxxx 3 | * E-mail : xxxx 4 | * Created Time : 2020-03-19 22:36:46 PM 5 | * File Name : P1440.cc 6 | */ 7 | 8 | #include 9 | 10 | const int N = 2e6 + 5; 11 | int n, m; 12 | 13 | struct node { 14 | int value, position; 15 | }; 16 | // 单调队列, 即value是按升序排列的, 且队列里最多只有m个元素(1.严格升序, 2.最多m个元素, 这两个条件) 17 | // 那么此时前m个元素的最小值就是队列的头元素 18 | std::deque que; 19 | 20 | int main() { 21 | scanf("%d %d", &n, &m); 22 | std::vector ans; 23 | 24 | for (int i = 1; i <= n; ++i) { 25 | int x; 26 | scanf("%d", &x); 27 | if (que.empty()) ans.push_back(0); 28 | else ans.push_back(que.front().value); 29 | 30 | // 现在考虑第i个元素要进入队列 31 | // 注意队列满足的两个条件, 1.严格升序, 2.最多m个元素 32 | while (!que.empty() && que.back().value >= x) 33 | que.pop_back(); 34 | que.push_back({x, i}); 35 | while (!que.empty() && i - que.front().position + 1 > m) 36 | que.pop_front(); 37 | } 38 | for (int i = 0; i < ans.size(); ++i) { 39 | printf("%d\n", ans[i]); 40 | } 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/提高-/P1658.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-06 21:25:52 PM 5 | * File Name : P1658.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 10 + 5; 19 | int x, n, A[N], vis[1000 * 2]; 20 | 21 | int main() { 22 | scanf("%d %d", &x, &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | vis[A[i]] = 1; 26 | } 27 | std::sort(A + 1, A + 1 + n); 28 | if (A[1] != 1) printf("-1\n"), exit(0); 29 | // 贪心, 考虑1 ~ sum都已经被ans枚硬币凑出来了, 添加下一枚硬币(1 <= x <= sum + 1), 转移到1 ~ sum + x, ans += 1 30 | int sum = 0, ans = 0; 31 | while (sum < x) { 32 | for (int i = sum + 1; i >= 1; --i) { 33 | if (vis[i]) { 34 | sum += i; 35 | ++ans; 36 | break; 37 | } 38 | } 39 | } 40 | printf("%d\n", ans); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/提高-/P1750.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-06 16:47:13 PM 5 | * File Name : P1750.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, c; 19 | std::stack stk; 20 | std::vector ans; 21 | 22 | int main() { 23 | scanf("%d %d", &n, &c); 24 | for (int i = 1; i <= n; ++i) { 25 | int x; 26 | scanf("%d", &x); 27 | while (!stk.empty() && x > stk.top()) { 28 | ans.push_back(stk.top()), stk.pop(); 29 | } 30 | stk.push(x); 31 | if (stk.size() == c) { 32 | ans.push_back(stk.top()), stk.pop(); 33 | } 34 | } 35 | while (!stk.empty()) { 36 | ans.push_back(stk.top()), stk.pop(); 37 | 38 | } 39 | for (auto &ch: ans) { 40 | printf("%d ", ch); 41 | } 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/提高-/P1843.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-07 23:19:23 PM 5 | * File Name : P1843.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, A, B; 19 | std::priority_queue, std::less > que; 20 | 21 | int main() { 22 | scanf("%d %d %d", &n, &A, &B); 23 | for (int i = 1; i <= n; ++i) { 24 | int x; 25 | scanf("%d", &x); 26 | que.push(x); 27 | } 28 | int cur = 0; 29 | while (1) { 30 | int top = que.top(); 31 | que.pop(); 32 | // 找到了 33 | if (cur >= top) printf("%d\n", cur / A), exit(0); 34 | top -= B; 35 | cur += A; 36 | que.push(top); 37 | } 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/提高-/P1970.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-18 15:39:36 PM 5 | * File Name : P1970.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, height[N], dp[N][2]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &height[i]); 25 | } 26 | dp[1][0] = dp[1][1] = 1; 27 | for (int i = 2; i <= n; ++i) { 28 | if (height[i] > height[i - 1]) dp[i][1] = dp[i - 1][0] + 1; 29 | else dp[i][1] = dp[i - 1][1]; 30 | 31 | if (height[i] < height[i - 1]) dp[i][0] = dp[i - 1][1] + 1; 32 | else dp[i][0] = dp[i - 1][0]; 33 | } 34 | printf("%d\n", std::max(dp[n][0], dp[n][1])); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/提高-/P2028.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-18 11:11:17 AM 5 | * File Name : P2028.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | #define ull unsigned long long 12 | 13 | void debug() { 14 | #ifdef Acui 15 | freopen("data.in", "r", stdin); 16 | freopen("data.out", "w", stdout); 17 | #endif 18 | } 19 | 20 | const int N = 1e4 + 5; 21 | ull n, k, p, dp[N][N / 10]; 22 | bool vis[N][N / 10]; 23 | 24 | // dp[i][j]表示i个苹果装进个盘子的方案数. 25 | // 转移的时候, 考虑第i个苹果怎么放 26 | ull dfs(int i, int j) { 27 | // 递归的边界 28 | if (i == 0) { 29 | return j == 0? 1: 0; 30 | } 31 | if (j == 0) return 0; 32 | // 记忆化 33 | if (vis[i][j]) return dp[i][j]; 34 | 35 | ull ret = 0; 36 | ret += dfs(i - 1, j - 1) % p; 37 | ret += dfs(i - 1, j) * j % p; 38 | vis[i][j] = true; 39 | return dp[i][j] = ret % p; 40 | } 41 | int main() { 42 | scanf("%llu %llu %llu", &n, &k, &p); 43 | printf("%llu\n", dfs(n, k)); 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /洛谷/提高-/P2240.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-01 22:56:44 PM 5 | * File Name : P2240.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | int n, T; 20 | struct Node { 21 | int m, v; 22 | double rate; 23 | bool operator<(const Node &rhs) const { 24 | return rate > rhs.rate; 25 | } 26 | }A[N]; 27 | 28 | int main() { 29 | scanf("%d %d", &n, &T); 30 | for (int i = 1; i <= n; ++i) { 31 | scanf("%d %d", &A[i].m, &A[i].v); 32 | A[i].rate = A[i].v * 1.0 / A[i].m; 33 | } 34 | // 按单位重量的价值贪心 35 | std::sort(A + 1, A + 1 + n); 36 | double ans = 0.0; 37 | for (int i = 1; i <= n; ++i) { 38 | ans += A[i].rate * std::min(A[i].m, T); 39 | T = T - std::min(A[i].m, T); 40 | } 41 | printf("%.2lf\n", ans); 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/提高-/P2440.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-12 23:08:27 PM 5 | * File Name : P2440.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, k, A[N]; 20 | 21 | bool check(int x) { 22 | if (x == 0) return true; 23 | int cnt = 0; 24 | for (int i = 1; i <= n; ++i) { 25 | cnt += A[i] / x; 26 | } 27 | return cnt >= k; 28 | } 29 | int main() { 30 | scanf("%d %d", &n, &k); 31 | int L = 0, R = 0; 32 | for (int i = 1; i <= n; ++i) { 33 | scanf("%d", &A[i]); 34 | R = std::max(R, A[i]); 35 | } 36 | 37 | // 整数域二分, [L, R) 38 | for (int i = 0; i < 50; ++i) { 39 | int mid = L + (R - L) / 2; 40 | if (check(mid)) L = mid; 41 | else R = mid; 42 | } 43 | printf("%d\n", L); 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /洛谷/提高-/P2661_2.out: -------------------------------------------------------------------------------- 1 | 12345 2 | -------------------------------------------------------------------------------- /洛谷/提高-/P2777.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-07 21:33:40 PM 5 | * File Name : P2777.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 3e5 + 5; 19 | int n, A[N]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | std::sort(A + 1, A + 1 + n, std::greater()); 27 | std::priority_queue, std::less > que; 28 | // 贪心, 看每一位是否可以是冠军 29 | int ans = 0; 30 | for (int i = 1; i <= n; ++i) { 31 | int top = 0; 32 | if (!que.empty()) top = que.top(); 33 | if (A[i] + n >= top) ++ans; 34 | que.push(A[i] + i); 35 | } 36 | printf("%d\n", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/提高-/P2947.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-06 20:16:33 PM 5 | * File Name : P2947.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, A[N], ans[N]; 20 | struct Node { 21 | int height, id; 22 | }; 23 | 24 | int main() { 25 | scanf("%d", &n); 26 | for (int i = 1; i <= n; ++i) { 27 | scanf("%d", &A[i]); 28 | } 29 | // 单调栈 30 | std::deque que; 31 | for (int i = n; i >= 1; --i) { 32 | while (!que.empty() && A[i] >= que.front().height) que.pop_front(); 33 | if (que.empty()) ans[i] = 0; 34 | else ans[i] = que.front().id; 35 | que.push_front({A[i], i}); 36 | } 37 | for (int i = 1; i <= n; ++i) { 38 | printf("%d\n", ans[i]); 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/提高-/P4995.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-07 16:48:12 PM 5 | * File Name : P4995.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 3e2 + 5; 19 | ll n, h[N]; 20 | 21 | ll my_pow(int x, int base) { 22 | ll ret = 1; 23 | for (int i = 1; i <= base; ++i) ret *= x; 24 | return ret; 25 | } 26 | int main() { 27 | scanf("%lld", &n); 28 | for (int i = 1; i <= n; ++i) { 29 | scanf("%lld", &h[i]); 30 | } 31 | std::sort(h + 1, h + 1 + n); 32 | h[0] = 0; 33 | ll ans = 0, cur = 0, L = 1, R = n; 34 | for (int i = 1; i <= n; ++i) { 35 | if (i & 1) ans += my_pow(std::abs(h[cur] - h[R]), 2), cur = R, --R; 36 | else ans += my_pow(std::abs(h[cur] - h[L]), 2), cur = L, ++L; 37 | } 38 | printf("%lld\n", ans); 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/提高-/data.out: -------------------------------------------------------------------------------- 1 | 8 2 | -------------------------------------------------------------------------------- /洛谷/提高/.acw169.cc.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFShare/Algorithm-challenger/43336871a5e48f8804d6e737c813d9d4c0dc2731/洛谷/提高/.acw169.cc.swp -------------------------------------------------------------------------------- /洛谷/提高/CF450A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-24 17:14:49 PM 5 | * File Name : CF450A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, m; 20 | 21 | struct Node { 22 | int round; 23 | int id; 24 | bool operator<(const Node &rhs) const { 25 | if (round == rhs.round) return id > rhs.id; 26 | return round > rhs.round; 27 | } 28 | }A[N]; 29 | 30 | int main() { 31 | scanf("%d %d", &n, &m); 32 | for (int i = 1; i <= n; ++i) { 33 | int x; 34 | scanf("%d", &x); 35 | A[i].round = std::ceil(x * 1.0 / m); 36 | A[i].id = i; 37 | } 38 | std::sort(A + 1, A + 1 + n); 39 | printf("%d\n", A[1].id); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/提高/CF485D.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-05 21:06:36 PM 5 | * File Name : CF485D.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e5 + 5; 19 | int n, A[N]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | std::sort(A + 1, A + 1 + n); 27 | n = std::unique(A + 1, A + 1 + n) - (A + 1); 28 | int ans = 0; 29 | // 枚举aj 30 | for (int j = 1; j <= n; ++j) { 31 | for (int ai = A[j]; ; ai += A[j]) { 32 | auto it = std::lower_bound(A + 1, A + 1 + n, ai) - A; 33 | if (A[it - 1] >= A[j]) ans = std::max(ans, A[it - 1] % A[j]); 34 | if (it == n + 1) break; 35 | } 36 | } 37 | printf("%d\n", ans); 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/提高/CF642A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-14 22:41:45 PM 5 | * File Name : CF642A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int t; 19 | 20 | int main() { 21 | scanf("%d", &t); 22 | while (t--) { 23 | int n, m; 24 | scanf("%d %d", &n, &m); 25 | if (n == 1) printf("0\n"); 26 | else if (n == 2) printf("%d\n", m); 27 | else if (n >= 3) printf("%d\n", 2 * m); 28 | } 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /洛谷/提高/CF642B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-14 22:47:16 PM 5 | * File Name : CF642B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 30 + 5; 19 | int t, n, k, A[N], B[N]; 20 | 21 | int main() { 22 | scanf("%d", &t); 23 | while (t--) { 24 | scanf("%d %d", &n, &k); 25 | for (int i = 1; i <= n; ++i) { 26 | scanf("%d", &A[i]); 27 | } 28 | for (int i = 1; i <= n; ++i) { 29 | scanf("%d", &B[i]); 30 | } 31 | std::sort(A + 1, A + 1 + n); 32 | std::sort(B + 1, B + 1 + n); 33 | std::reverse(B + 1, B + 1 + n); 34 | for (int i = 1; i <= k; ++i) { 35 | if (A[i] < B[i]) A[i] = B[i]; 36 | else break; 37 | } 38 | int sum = 0; 39 | for (int i = 1; i <= n; ++i) { 40 | sum += A[i]; 41 | } 42 | printf("%d\n", sum); 43 | } 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /洛谷/提高/CF642C.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-14 23:03:49 PM 5 | * File Name : CF642C.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll t, n; 19 | 20 | int main() { 21 | scanf("%lld", &t); 22 | while (t--) { 23 | scanf("%lld", &n); 24 | if (n == 1) { 25 | printf("0\n"); 26 | continue; 27 | } 28 | ll sum = 0, up = 3, h = 1; 29 | for (int i = 1; i <= n / 2; ++i) { 30 | sum += i * (up * 2+ h * 2); 31 | up += 2; 32 | h += 2; 33 | } 34 | printf("%lld\n", sum); 35 | } 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/提高/CFAlarm_Clock.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-17 18:04:21 PM 5 | * File Name : CFAlarm_Clock.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll t, a, b, c, d; 19 | int main() { 20 | scanf("%lld", &t); 21 | while (t--) { 22 | scanf("%lld %lld %lld %lld", &a, &b, &c, &d); 23 | if (b >= a) printf("%lld\n", b); 24 | else if (c - d <= 0) printf("-1\n"); 25 | else printf("%lld\n", b + ((a - b + c - d - 1) / (c - d)) * c); 26 | } 27 | return 0; 28 | } 29 | -------------------------------------------------------------------------------- /洛谷/提高/P1018.py: -------------------------------------------------------------------------------- 1 | # Author : OFShare 2 | # E-mail : OFShare@outlook.com 3 | # Created Time : 2020-04-20 22:59:25 PM 4 | # File Name : P1018.py 5 | 6 | import math 7 | import numpy as np 8 | 9 | # number = [] 10 | # dp = [] 11 | 12 | def dfs(i, j): 13 | global number, dp 14 | # 递归的边界 15 | if j == 0: 16 | return number[1][i] 17 | # 记忆化 18 | if dp[i][j] != -1: 19 | return dp[i][j] 20 | 21 | ret = -1e9 22 | for k in range(i): 23 | k = k + 1 24 | if k == i: 25 | break 26 | ret = max(ret, dfs(k, j - 1) * number[k + 1][i]) 27 | dp[i][j] = ret 28 | return dp[i][j] 29 | 30 | if __name__ == '__main__': 31 | n, k = map(int, input().split()) 32 | s = '1' + input() 33 | 34 | # global number, dp 35 | number = [[-1 for j in range(n + 1)] for i in range(n + 1)] 36 | dp = [[-1 for j in range(n + 1)] for i in range(n + 1)] 37 | for i in range(1, n + 1): 38 | for j in range(i, n + 1): 39 | number[i][j] = int(s[i: j + 1]) 40 | print(dfs(n, k)) 41 | -------------------------------------------------------------------------------- /洛谷/提高/P1714.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-06 19:05:30 PM 5 | * File Name : P1714.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 5e5 + 5; 19 | int n, m, A[N], s[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &m); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | s[i] = s[i - 1] + A[i]; 26 | } 27 | // 单调队列, 维护前缀和的最小值 28 | std::deque que; 29 | int ans = 0; 30 | for (int i = 1; i <= n; ++i) { 31 | ans = std::max(ans, A[i]); 32 | if (!que.empty()) ans = std::max(ans, s[i] - que.front()); 33 | if (!que.empty() && i - m >= 1 && que.front() == s[i - m]) que.pop_front(); 34 | while (!que.empty() && que.back() > s[i]) que.pop_back(); 35 | que.push_back(s[i]); 36 | } 37 | printf("%d\n", ans); 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/提高/P4305.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-14 16:47:58 PM 5 | * File Name : P4305.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 5e4 + 5; 19 | int T, n, A[N]; 20 | 21 | int main() { 22 | scanf("%d", &T); 23 | while (T--) { 24 | std::unordered_map mp; 25 | 26 | scanf("%d", &n); 27 | for (int i = 1; i <= n; ++i) 28 | scanf("%d", &A[i]); 29 | for (int i = 1; i <= n; ++i) { 30 | if (mp.find(A[i]) == mp.end()) { 31 | printf("%d ", A[i]); 32 | mp[A[i]] = true; 33 | } 34 | } 35 | printf("\n"); 36 | } 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/提高/P6023.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-08 22:07:02 PM 5 | * File Name : P6023.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | ll n, m, k; 20 | std::vector sons[N]; 21 | 22 | int main() { 23 | scanf("%lld %lld %lld", &n, &m, &k); 24 | for (int i = 1; i <= k; ++i) { 25 | ll p, q; 26 | scanf("%lld %lld", &p, &q); 27 | sons[p].push_back(q); 28 | } 29 | // 贪心, 答案在某一天把这n步都走完 30 | ll ans = 0; 31 | for (int i = 1; i <= m; ++i) { 32 | ll cur = 0; 33 | for (int j = 0; j < sons[i].size(); ++j) { 34 | ll q = sons[i][j]; 35 | cur += std::max(0LL, n - q); 36 | } 37 | ans = std::max(ans, cur); 38 | } 39 | printf("%lld\n", ans); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/提高/UVA-10617.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-07-13 23:12:50 PM 5 | * File Name : UVA-10617.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 60 + 5; 19 | int t; 20 | char str[N]; 21 | 22 | // dp[i][j]表示区间i~j里回文序列的个数 23 | ll dp[N][N]; 24 | ll dfs(int i, int j) { 25 | // 递归的边界 26 | if (i == j) return 1; 27 | if (i > j) return 0; 28 | // 记忆化 29 | if (dp[i][j] != -1) return dp[i][j]; 30 | 31 | ll ret = 0; 32 | if (str[i] == str[j]) ret = dfs(i, j - 1) + dfs(i + 1, j) + 1; 33 | else ret = dfs(i, j - 1) + dfs(i + 1, j) - dfs(i + 1, j - 1); 34 | return dp[i][j] = ret; 35 | } 36 | int main() { 37 | scanf("%d", &t); 38 | while (t--) { 39 | scanf("%s", str + 1); 40 | std::memset(dp, -1, sizeof dp); 41 | printf("%lld\n", dfs(1, (int)std::strlen(str + 1))); 42 | } 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/提高/acw129.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | # 计算组合C(n, m) 4 | def C(n, m): 5 | return math.factorial(n) // math.factorial(m) // math.factorial(n - m) 6 | 7 | if __name__ == '__main__': 8 | n = (int)(input()) 9 | ret1 = C(2 * n, n) 10 | ret2 = C(2 * n, n - 1) 11 | print((int)(ret1 - ret2)) 12 | -------------------------------------------------------------------------------- /洛谷/提高/acw150.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-08 11:28:53 AM 5 | * File Name : acw150.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | char A[N]; 20 | int dp[N], ans; 21 | 22 | // dp[i]表示以第i个元素结尾的连续合法字符串的最长的长度 23 | // 像这种'连续的', 转移大多和上一个有关 24 | int main() { 25 | scanf("%s", A + 1); 26 | for (int i = 1; i <= std::strlen(A + 1); ++i) { 27 | dp[i] = 0; 28 | if (A[i] == '(' || A[i] == '[' || A[i] == '{') dp[i] = 0; 29 | else { 30 | int k = i - 1 - dp[i - 1]; 31 | if ((A[i] == ')' && A[k] == '(') || (A[i] == ']' && A[k] == '[') || (A[i] == '}' && A[k] == '{')) 32 | dp[i] = dp[k - 1] + dp[i - 1] + 2; 33 | } 34 | ans = std::max(ans, dp[i]); 35 | } 36 | printf("%d\n", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/提高/acw164-solution2.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-22 00:00:36 AM 5 | * File Name : acw164-solution2.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 3e4 + 5; 19 | int n, m; 20 | bool vis[N]; 21 | std::set sons[N]; 22 | std::bitset dp[N]; 23 | 24 | // 从结点u出发能够遍历到的所有点的集合 25 | std::bitset dfs(int u) { 26 | // 记忆化 27 | if (vis[u]) return dp[u]; 28 | 29 | vis[u] = true; 30 | dp[u][u] = 1; 31 | for (auto &v: sons[u]) { 32 | dp[u] |= dfs(v); 33 | } 34 | return dp[u]; 35 | } 36 | int main() { 37 | scanf("%d %d", &n, &m); 38 | for (int i = 1; i <= m; ++i) { 39 | int u, v; 40 | scanf("%d %d", &u, &v); 41 | // 去掉自环 42 | if (u == v) continue; 43 | sons[u].insert(v); 44 | } 45 | for (int i = 1; i <= n; ++i) { 46 | printf("%d\n", dfs(i).count()); 47 | } 48 | return 0; 49 | } 50 | -------------------------------------------------------------------------------- /洛谷/提高/acw89.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-12 15:28:53 PM 5 | * File Name : acw89.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll a, b, p, ret = 1; 19 | 20 | int main() { 21 | scanf("%lld %lld %lld", &a, &b, &p); 22 | while (b) { 23 | if (b & 1) ret = (ret * a) % p; 24 | b >>= 1; 25 | a = a * a % p; 26 | } 27 | printf("%lld\n", ret % p); 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/提高/acw90.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-12 15:09:52 PM 5 | * File Name : acw90.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll a, b, p, ret; 19 | 20 | int main() { 21 | scanf("%lld %lld %lld", &a, &b, &p); 22 | // b 用二进制拆分, a * b = a + a + ... + a, 一共b个a相加 23 | while (b) { 24 | if (b & 1) ret = (ret + a) % p; 25 | b >>= 1; 26 | a = a * 2 % p; 27 | } 28 | printf("%lld\n", ret); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /洛谷/提高/data.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def gen(): 4 | n = random.randint(10, 15) 5 | G = random.randint(1, 10000) 6 | print(n, G) 7 | 8 | for i in range(1, n + 1): 9 | cost = random.randint(0, 10000) 10 | value = random.randint(0, 1000000) 11 | father = random.randint(1, i) 12 | print(cost, value, father) 13 | 14 | 15 | if __name__ == '__main__': 16 | gen() 17 | -------------------------------------------------------------------------------- /洛谷/提高/test.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-04 17:54:22 PM 5 | * File Name : test.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int main() { 19 | int a[5] = {0, }; 20 | int b[5] = {1, 2, }; 21 | int c[5] = {99}; 22 | for (int i = 0; i < 5; ++i) { 23 | std::cout << "a: " << a[i] << std::endl; 24 | } 25 | for (int i = 0; i < 5; ++i) { 26 | std::cout << "b: " << b[i] << std::endl; 27 | } 28 | for (int i = 0; i < 5; ++i) { 29 | std::cout << "c: " << c[i] << std::endl; 30 | } 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/普及-/AT907.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-19 17:29:15 PM 5 | * File Name : AT907.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | int main() { 20 | scanf("%d", &n); 21 | // a第一大, b第二大, 这样可以O(N)维护a, b 22 | int a = 0, b = 0; 23 | for (int i = 1; i <= n; ++i) { 24 | int x; 25 | scanf("%d", &x); 26 | if (x == a || x == b) continue; 27 | if (x > a) b = a, a = x; 28 | else if (x > b) b = x; 29 | } 30 | printf("%d\n", b); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /洛谷/普及-/CF334B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-25 17:53:29 PM 5 | * File Name : CF334B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | std::set > st; 19 | std::set X, Y; 20 | 21 | int main() { 22 | for (int i = 1; i <= 8; ++i) { 23 | int x, y; 24 | scanf("%d %d", &x, &y); 25 | X.insert(x); 26 | Y.insert(y); 27 | st.insert({x, y}); 28 | } 29 | if (X.size() != 3 || Y.size() != 3 || st.size() != 8) printf("ugly\n"), exit(0); 30 | int i = 1, j = 1; 31 | for (auto it = X.begin(); i <= 3; ++i, ++it) { 32 | j = 1; 33 | for (auto it2 = Y.begin(); j <= 3; ++j, ++it2) { 34 | if (i == 2 && j == 2) continue; 35 | int x = *it, y = *it2; 36 | if (st.count({x, y}) != 1) printf("ugly\n"), exit(0); 37 | } 38 | } 39 | printf("respectable\n"); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/普及-/CF483C.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-04 22:51:30 PM 5 | * File Name : CF483C.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, k, A[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &k); 23 | std::set st; 24 | 25 | int tmp = n - k - 1; 26 | for (int i = 1; i <= n; ++i) { 27 | if (k == 0) { 28 | A[i] = tmp--; 29 | continue; 30 | } 31 | if (i == 1) st.insert(n), A[i] = n; 32 | else { 33 | int a = A[i - 1] + k; 34 | int b = A[i - 1] - k; 35 | if (a >= 1 && a <= n && st.count(a) == 0) st.insert(a), A[i] = a; 36 | else st.insert(b), A[i] = b; 37 | --k; 38 | } 39 | } 40 | for (int i = 1; i <= n; ++i) { 41 | printf("%d ", A[i]); 42 | } 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /洛谷/普及-/CF545D.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-07 16:02:13 PM 5 | * File Name : CF545D.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, A[N]; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | std::sort(A + 1, A + 1 + n); 27 | int sum = 0, ans = 0; 28 | for (int i = 1; i <= n; ++i) { 29 | if (sum <= A[i]) ++ans, sum += A[i]; 30 | } 31 | printf("%d\n", ans); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/普及-/CF792A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-23 16:27:37 PM 5 | * File Name : CF792A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e5 + 5; 19 | ll n, A[N]; 20 | 21 | int main() { 22 | scanf("%lld", &n); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%lld", &A[i]); 25 | } 26 | std::sort(A + 1, A + 1 + n); 27 | ll min_ans = 1e18; 28 | for (int i = 1; i < n; ++i) { 29 | min_ans = std::min(min_ans, std::abs(A[i] - A[i + 1])); 30 | } 31 | int cnt = 0; 32 | for (int i = 1; i < n; ++i) { 33 | if (std::abs(A[i] - A[i + 1]) == min_ans) ++cnt; 34 | } 35 | printf("%lld %d\n", min_ans, cnt); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/普及-/CF792B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-23 16:33:43 PM 5 | * File Name : CF792B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, k; 19 | int main() { 20 | scanf("%d %d", &n, &k); 21 | // 用链表模拟 22 | std::list li; 23 | for (int i = 1; i <= n; ++i) { 24 | li.push_back(i); 25 | } 26 | int leader = 0; 27 | for (int i = 1; i <= k; ++i) { 28 | int x; 29 | scanf("%d", &x); 30 | int step = x % li.size(); 31 | leader = (leader + step) % li.size(); 32 | auto pos = li.begin(); 33 | std::advance(pos, leader); 34 | printf("%d ", *pos); 35 | auto it = li.erase(pos); 36 | leader = std::distance(li.begin(), it); 37 | } 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/普及-/CF808B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-02 22:15:31 PM 5 | * File Name : CF808B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e5 + 5; 19 | ll n, k, sum[N]; 20 | int main() { 21 | scanf("%lld %lld", &n, &k); 22 | for (int i = 1; i <= n; ++i) { 23 | ll x; 24 | scanf("%lld", &x); 25 | sum[i] = sum[i - 1] + x; 26 | } 27 | ll s = 0; 28 | for (int i = 1; i + k - 1 <= n; ++i) { 29 | s += (sum[i + k - 1] - sum[i - 1]); 30 | } 31 | printf("%.9lf\n", s * 1.0 / (n - k + 1)); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/普及-/CF811B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-04 15:14:02 PM 5 | * File Name : CF811B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4 + 5; 19 | int n, m, A[N], B[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &m); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | for (int i = 1; i <= m; ++i) { 27 | std::memcpy(B, A, sizeof A); 28 | int l, r, x; 29 | scanf("%d %d %d", &l, &r, &x); 30 | int a = A[x], cnt = 0; 31 | // 统计l, r区间里, 比a小的个数 32 | for (int k = l; k <= r; ++k) { 33 | if (A[k] < a) ++cnt; 34 | } 35 | if (cnt == x - 1 - l + 1) printf("Yes\n"); 36 | else printf("No\n"); 37 | } 38 | return 0; 39 | } 40 | -------------------------------------------------------------------------------- /洛谷/普及-/CF812A.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-26 14:20:52 PM 5 | * File Name : CF812A.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int A[5][5]; 19 | 20 | int main() { 21 | for (int i = 0; i <= 3; ++i) { 22 | for (int j = 0; j <= 3; ++j) { 23 | scanf("%d", &A[i][j]); 24 | } 25 | } 26 | // 枚举判断, 当有行人的时候 27 | for (int i = 0; i <= 3; ++i) { 28 | if (A[i][3] == 1) { 29 | int left_id = (i - 1 + 4) % 4; 30 | int mid_id = (i + 2) % 4; 31 | int right_id = (i + 1) % 4; 32 | if (A[left_id][2] == 1 || A[mid_id][1] == 1 || A[right_id][0] == 1 || A[i][0] == 1 || A[i][1] == 1 || A[i][2] == 1) printf("YES\n"), exit(0); 33 | } 34 | } 35 | printf("NO\n"); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/普及-/P1007.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() { 6 | int n,l,p,maxv=0,minv=0; 7 | scanf("%d%d",&l,&n); 8 | for(int i=1;i<=n;i++) 9 | { 10 | scanf("%d",&p); 11 | maxv=max(maxv,max(l-p+1,p)); 12 | minv=max(minv,min(l-p+1,p)); 13 | } 14 | printf("%d %d",minv,maxv); 15 | return 0; 16 | } 17 | -------------------------------------------------------------------------------- /洛谷/普及-/P1044.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-14 16:09:12 PM 5 | * File Name : P1044.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 18 + 5; 19 | int n; 20 | // 操作数序列有cnt1个元素, 中转站有cnt2个元素, 这种状态下能获得的操作数 21 | // 我们并不关心具体的元素值, 只需要元素的个数即可 22 | int dp[N][N]; 23 | int dfs(int cnt1, int cnt2) { 24 | if (dp[cnt1][cnt2] != -1) return dp[cnt1][cnt2]; 25 | if (cnt1 == 0) return 1; 26 | int ret = 0; 27 | if (cnt1 >= 1) { 28 | ret += dfs(cnt1 - 1, cnt2 + 1); 29 | } 30 | if (cnt2 >= 1) { 31 | ret += dfs(cnt1, cnt2 - 1); 32 | } 33 | return dp[cnt1][cnt2] = ret; 34 | } 35 | int main() { 36 | scanf("%d", &n); 37 | std::memset(dp, -1, sizeof dp); 38 | int ret = dfs(n, 0); 39 | printf("%d\n", ret); 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/普及-/P1060.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-25 14:31:39 PM 5 | * File Name : P1060.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, m, dp[25 + 5][30000 + 5]; 19 | 20 | int main() { 21 | scanf("%d %d", &n, &m); 22 | for (int i = 1; i <= m; ++i) { 23 | int v, p; 24 | scanf("%d %d", &v, &p); 25 | for (int j = 0; j <= n; ++j) { 26 | dp[i][j] = dp[i - 1][j]; 27 | if (j - v >= 0) 28 | dp[i][j] = std::max(dp[i][j], dp[i - 1][j - v] + v * p); 29 | } 30 | } 31 | printf("%d\n", dp[m][n]); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/普及-/P1094.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-14 16:41:10 PM 5 | * File Name : P1094.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 3e4 + 5; 19 | int w, n, A[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &w, &n); 23 | for (int i = 1; i <= n; ++i) 24 | scanf("%d", &A[i]); 25 | 26 | // 排序后贪心 27 | std::sort(A + 1, A + 1 + n); 28 | int L = 1, R = n, ans = 0; 29 | while (L <= R) { 30 | if (A[L] + A[R] <= w) ++ans, ++L, --R; 31 | else ++ans, --R; 32 | } 33 | printf("%d\n", ans); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/普及-/P1097.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int main() { 6 | map a; //把它看成数组 7 | set b; 8 | int n,i,q; 9 | cin>>n; 10 | for(i=1; i<=n; i++) { 11 | scanf("%d",&q); 12 | a[q]++; 13 | b.insert(q); 14 | } 15 | for(set::iterator it=b.begin(); it!=b.end(); it++) //迭代器 16 | printf("%d %d\n",*it,a[*it]); 17 | } 18 | -------------------------------------------------------------------------------- /洛谷/普及-/P1100.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using std::cin; 8 | using std::cout; 9 | using std::endl; 10 | using std::string; 11 | using std::vector; 12 | using std::sort; 13 | using std::bitset; 14 | 15 | int main(void) { 16 | unsigned long long n = 0; 17 | cin >> n; 18 | 19 | bitset<32> binary(n),rev(0); 20 | 21 | for (int i = 0; i < 16; i++) 22 | { 23 | rev[16+i] = binary[i]; 24 | } 25 | 26 | for (int i = 0; i < 16; i++) 27 | { 28 | rev[i] = binary[i + 16]; 29 | } 30 | 31 | cout << rev.to_ullong() << endl; 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /洛谷/普及-/P1102.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-14 16:19:32 PM 5 | * File Name : P1102.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e5 + 5; 19 | ll n, C; 20 | ll number[N]; 21 | 22 | int main() { 23 | scanf("%lld %lld", &n, &C); 24 | for (int i = 1; i <= n; ++i) { 25 | scanf("%lld", &number[i]); 26 | } 27 | 28 | ll ans = 0; 29 | std::sort(number + 1, number + 1 + n); 30 | // 枚举B, 找A是否存在 31 | for (int i = 1; i <= n; ++i) { 32 | ll B = number[i]; 33 | ll A = B + C; 34 | ll cnt = std::upper_bound(number + 1, number + 1 + n, A) - std::lower_bound(number + 1, number + 1 + n, A); 35 | if (cnt) { 36 | ans += cnt; 37 | if (A == B) ans -= 1; 38 | } 39 | } 40 | printf("%lld\n", ans); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/普及-/P1105.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | using namespace std; 4 | 5 | int n,a[1001],b[1001],c[1001]; 6 | 7 | int main() { 8 | cin>>n; 9 | for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i]; 10 | for(int i=1;i<=n;i++){ 11 | int sum1=0,sum2=0; 12 | for(int j=1;j<=n;j++)if(a[j]b[i])if(a[sum1]c[i])if(a[sum2] 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 50 + 5; 19 | int n, A[N]; 20 | int L, R; 21 | 22 | int main() { 23 | scanf("%d", &n); 24 | int sum = 0; 25 | for (int i = 1; i <= n; ++i) 26 | scanf("%d", &A[i]), sum += A[i]; 27 | scanf("%d %d", &L, &R); 28 | if (sum < n * L || sum > n * R) { 29 | printf("-1\n"); 30 | return 0; 31 | } 32 | 33 | int a = 0, b = 0; 34 | for (int i = 1; i <= n; ++i) { 35 | if (A[i] > R) a += A[i] - R; 36 | if (A[i] < L) b += L - A[i]; 37 | } 38 | printf("%d\n", std::max(a, b)); 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /洛谷/普及-/P1145.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-15 21:19:30 PM 5 | * File Name : P1145.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int k; 19 | int main() { 20 | std::cin >> k; 21 | 22 | // 枚举m, 光标从0开始 23 | for (int m = k + 1; ; ++m) { 24 | // kill k个坏人 25 | bool found = true; 26 | int cursor = 0; 27 | for (int i = 1; i <= k; ++i) { 28 | // 从当前光标走m步的位置 29 | cursor = (cursor + m - 1) % (2 * k - i + 1); 30 | if (cursor < k) { 31 | found = false; 32 | break; 33 | } 34 | } 35 | if (found) { 36 | std::cout << m << std::endl; 37 | break; 38 | } 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/普及-/P1157.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-13 20:30:56 PM 5 | * File Name : P1157.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 21 + 5; 19 | int n, r; 20 | int vis[N]; 21 | 22 | void dfs(int step, std::vector vec) { 23 | if (step == r) { 24 | for (int i = 0; i < vec.size(); ++i) { 25 | printf("%3d", vec[i]); 26 | } 27 | printf("\n"); 28 | return ; 29 | } 30 | for (int i = 1; i <= n; ++i) { 31 | if (vis[i] == false) { 32 | if (vec.size() > 0 && vec[vec.size() - 1] > i) continue; 33 | vec.push_back(i); 34 | vis[i] = true; 35 | dfs(step + 1, vec); 36 | vis[i] = false; 37 | vec.pop_back(); 38 | } 39 | } 40 | } 41 | int main() { 42 | scanf("%d %d", &n, &r); 43 | dfs(0, std::vector{}); 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /洛谷/普及-/P1170.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-15 21:05:58 PM 5 | * File Name : P1170.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n, x11, y11, x22, y22; 19 | int main() { 20 | std::cin >> n; 21 | while (n--) { 22 | std::cin >> x11 >> y11 >> x22 >> y22; 23 | // 两整点之间整点的个数 24 | int ret = std::__gcd(std::abs(x11 - x22), std::abs(y11 - y22)) - 1; 25 | if (ret == 0) std::cout << "no\n"; 26 | else std::cout << "yes\n"; 27 | } 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/普及-/P1255.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | 3 | #开数组,更简单 4 | farr =[] 5 | import sys 6 | #输入 7 | n=int(input()) 8 | #注意到如果没有台阶就输出0,在这里WA了一次 9 | if n==0: 10 | print (0) 11 | sys.exit() 12 | #经典的肥波纳妾数列过程 13 | for i in range(n+1): 14 | if i ==0 or i ==1: 15 | farr.append(1) 16 | else: 17 | farr.append(farr[i-2]+farr[i-1]) 18 | #数列最后一项即为答案 19 | print(farr[n]) 20 | #结束 21 | -------------------------------------------------------------------------------- /洛谷/普及-/P1610.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-19 19:15:18 PM 5 | * File Name : P1610.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, dist, pos[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &dist); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &pos[i]); 25 | } 26 | if (n == 1) printf("0\n"), exit(0); 27 | 28 | std::sort(pos + 1, pos + 1 + n); 29 | int ans = 0, L = pos[1]; 30 | for (int i = 2; i <= n - 1; ++i) { 31 | if (pos[i + 1] - L <= dist) ++ans; 32 | else L = pos[i]; 33 | } 34 | printf("%d\n", ans); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /洛谷/普及-/P1628.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-17 20:27:17 PM 5 | * File Name : P1628.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | std::vector vec; 20 | 21 | int main() { 22 | std::cin >> n; 23 | for (int i = 1; i <= n; ++i) { 24 | std::string str; 25 | std::cin >> str; 26 | vec.push_back(str); 27 | } 28 | std::sort(vec.begin(), vec.end()); 29 | 30 | std::string target; 31 | std::cin >> target; 32 | for (int i = 0; i < vec.size(); ++i) { 33 | if (vec[i].find(target, 0) == 0) 34 | std::cout << vec[i] << std::endl; 35 | } 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/普及-/P1803.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-14 17:30:00 PM 5 | * File Name : P1803.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e6 + 5; 19 | int n; 20 | struct node { 21 | int start, end; 22 | }A[N]; 23 | 24 | int main() { 25 | scanf("%d", &n); 26 | for (int i = 1; i <= n; ++i) { 27 | scanf("%d %d", &A[i].start, &A[i].end); 28 | } 29 | std::sort(A + 1, A + 1 + n, [](const node &lhs, const node &rhs) { 30 | return lhs.end < rhs.end; 31 | }); 32 | int ans = 1, R = A[1].end; 33 | for (int i = 2; i <= n; ++i) { 34 | if (R <= A[i].start) ++ans, R = A[i].end; 35 | } 36 | printf("%d\n", ans); 37 | return 0; 38 | } 39 | -------------------------------------------------------------------------------- /洛谷/普及-/P1847.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 14:09:54 PM 5 | * File Name : P1847.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int MAXN = 2e3 + 5; 19 | ll M, N; 20 | struct node { 21 | ll x1, y1; 22 | ll x2, y2; 23 | }A[MAXN]; 24 | 25 | int main() { 26 | scanf("%lld %lld", &M, &N); 27 | for (int i = 1; i <= M; ++i) { 28 | scanf("%lld %lld %lld %lld", &A[i].x1, &A[i].y1, &A[i].x2, &A[i].y2); 29 | } 30 | for (int i = 1; i <= N; ++i) { 31 | ll x, y; 32 | scanf("%lld %lld", &x, &y); 33 | // 扫一遍 34 | ll cnt = 0, last_cnt; 35 | for (int j = 1; j <= M; ++j) { 36 | if (x >= A[j].x1 && x <= A[j].x2 && y >= A[j].y1 && y <= A[j].y2) 37 | ++cnt, last_cnt = j; 38 | } 39 | if (cnt == 0) printf("NO\n"); 40 | else printf("YES %lld %lld\n", cnt, last_cnt); 41 | } 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/普及-/P1969.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 19:24:58 PM 5 | * File Name : P1969.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, A[N]; 20 | 21 | // 返回[L, R + 1)区间里, 搭建为目标积木所最少需要的次数 22 | int dfs(int L, int R) { 23 | if (L + 1 == R) return A[L]; 24 | int mid = (L + R) / 2; 25 | return dfs(L, mid) + dfs(mid, R) - std::min(A[mid - 1], A[mid]); 26 | } 27 | int main() { 28 | scanf("%d", &n); 29 | for (int i = 1; i <= n; ++i) 30 | scanf("%d", &A[i]); 31 | int ret = dfs(1, n + 1); 32 | printf("%d\n", ret); 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /洛谷/普及-/P3378.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-06 20:58:51 PM 5 | * File Name : P3378.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | std::priority_queue, std::greater > que; 20 | 21 | int main() { 22 | scanf("%d", &n); 23 | while (n--) { 24 | int op, x; 25 | scanf("%d", &op); 26 | if (op == 1) { 27 | scanf("%d", &x); 28 | que.push(x); 29 | } else if (op == 2) { 30 | int top = que.top(); 31 | printf("%d\n", top); 32 | } else if (op == 3) { 33 | que.pop(); 34 | } 35 | } 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/普及-/P3817.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-06-07 16:12:40 PM 5 | * File Name : P3817.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, x, A[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &x); 23 | for (int i = 1; i <= n; ++i) { 24 | scanf("%d", &A[i]); 25 | } 26 | ll ans = 0, pre = 0; 27 | for (int i = 1; i <= n; ++i) { 28 | ll eat = std::max(0LL, pre + A[i] - x); 29 | A[i] -= eat; 30 | ans += eat; 31 | pre = A[i]; 32 | } 33 | printf("%lld\n", ans); 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /洛谷/普及-/P4136.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-11 22:39:35 PM 5 | * File Name : P4136.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | int n; 19 | int main() { 20 | while (scanf("%d", &n) && n) { 21 | int sum = n * n - 1; 22 | if (sum % 2 == 1) printf("Alice\n"); 23 | else printf("Bob\n"); 24 | } 25 | return 0; 26 | } 27 | -------------------------------------------------------------------------------- /洛谷/普及-/P5019.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-03-08 19:04:07 PM 5 | * File Name : P5019.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e5 + 5; 19 | int n, A[N]; 20 | 21 | // dp[i]: 前i个道路铺平的最少的天数(即全部变为0最少的操作次数) 22 | int dp[N]; 23 | 24 | int main() { 25 | scanf("%d", &n); 26 | for (int i = 1; i <= n; ++i) 27 | scanf("%d", &A[i]); 28 | for (int i = 1; i <= n; ++i) { 29 | if (i == 1) dp[i] = A[i]; 30 | else { 31 | if (A[i] > A[i - 1]) dp[i] = dp[i - 1] + A[i] - A[i - 1]; 32 | else dp[i] = dp[i - 1]; 33 | } 34 | } 35 | printf("%d\n", dp[n]); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /洛谷/普及-/data.in: -------------------------------------------------------------------------------- 1 | td 2 | Td tLWCsrmt 3 | -------------------------------------------------------------------------------- /洛谷/普及-/data.out: -------------------------------------------------------------------------------- 1 | 1 0 2 | -------------------------------------------------------------------------------- /洛谷/省选-/CF787B.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-26 20:15:13 PM 5 | * File Name : CF787B.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e4 + 5; 19 | int n, m, k, A[N]; 20 | 21 | int main() { 22 | scanf("%d %d", &n, &m); 23 | for (int i = 1; i <= m; ++i) { 24 | scanf("%d", &k); 25 | 26 | std::set st; 27 | for (int j = 1; j <= k; ++j) { 28 | scanf("%d", &A[j]); 29 | assert(std::abs(A[j]) >= 1); 30 | if (A[j] > 0) st.insert(A[j]); 31 | } 32 | bool cancel = true; 33 | for (int j = 1; j <= k; ++j) { 34 | if (A[j] < 0) { 35 | if (st.count(-1 * A[j]) >= 1) cancel = false; 36 | } 37 | } 38 | if (cancel) printf("YES\n"), exit(0); 39 | } 40 | printf("NO\n"); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/省选-/P1801-tle.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-07 21:05:43 PM 5 | * File Name : P1801.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 2e5 + 5; 19 | int m, n, A[N], q[N], cnt_get, cnt_q = 1; 20 | std::vector vec; 21 | 22 | int main() { 23 | scanf("%d %d", &m, &n); 24 | for (int i = 1; i <= m; ++i) { 25 | scanf("%d", &A[i]); 26 | } 27 | for (int i = 1; i <= n; ++i) { 28 | scanf("%d", &q[i]); 29 | } 30 | std::vector ans; 31 | for (int i = 1; i <= m; ++i) { 32 | auto it = std::lower_bound(vec.begin(), vec.end(), A[i]); 33 | vec.insert(it, A[i]); 34 | while (vec.size() == q[cnt_q]) { 35 | ++cnt_q; 36 | ans.push_back(vec[++cnt_get - 1]); 37 | } 38 | } 39 | for (int i = 0; i < ans.size(); ++i) { 40 | printf("%d\n", ans[i]); 41 | } 42 | return 0; 43 | } 44 | -------------------------------------------------------------------------------- /洛谷/省选-/P1823.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-23 12:29:09 PM 5 | * File Name : P1823.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll n, ans; 19 | 20 | int main() { 21 | scanf("%lld", &n); 22 | // 单调队列 + 二分 23 | std::deque que; 24 | for (int i = 1; i <= n; ++i) { 25 | ll x; 26 | scanf("%lld", &x); 27 | if (!que.empty()) { 28 | auto it = std::upper_bound(que.rbegin(), que.rend(), x); 29 | ans += it - que.rbegin(); 30 | // 判断第一个大于x的值是否存在 31 | if (it != que.rend()) ans += 1; 32 | } 33 | 34 | while (!que.empty()) { 35 | if (que.back() < x) que.pop_back(); 36 | else break; 37 | } 38 | que.push_back(x); 39 | } 40 | printf("%lld\n", ans); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/省选-/P2657-tle.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-04-27 13:32:23 PM 5 | * File Name : P2657.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll A, B, cnt; 19 | 20 | // 判断x是否是题目所说的wendy数 21 | bool check(ll x) { 22 | std::vector vec; 23 | int n = 0; 24 | while (x) { 25 | vec.push_back(x % 10); 26 | x /= 10; 27 | ++n; 28 | } 29 | if (n <= 1) return true; 30 | for (int i = 0; i < n - 1; ++i) { 31 | if (std::abs(vec[i] - vec[i + 1]) < 2) return false; 32 | } 33 | return true; 34 | } 35 | int main() { 36 | scanf("%lld %lld", &A, &B); 37 | for (int i = A; i <= B; ++i) { 38 | if (check(i)) ++cnt; 39 | } 40 | printf("%lld\n", cnt); 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /洛谷/省选-/P2704.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-19 22:45:28 PM 5 | * File Name : P2704.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | const int N = 1e2 + 5; 19 | int n, m; 20 | char mp[N][N]; 21 | 22 | int main() { 23 | scanf("%d %d", &n, &m); 24 | for (int i = 1; i <= n; ++i) { 25 | scanf("%s", mp[i] + 1); 26 | } 27 | 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /洛谷/省选-/UVA1638.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Author : OFShare 3 | * E-mail : OFShare@outlook.com 4 | * Created Time : 2020-05-03 21:28:37 PM 5 | * File Name : UVA1638.cc 6 | */ 7 | 8 | #include 9 | 10 | #define ll long long 11 | void debug() { 12 | #ifdef Acui 13 | freopen("data.in", "r", stdin); 14 | freopen("data.out", "w", stdout); 15 | #endif 16 | } 17 | 18 | ll T, n, l, r, dp[25][25][25]; 19 | 20 | // dp[i][j][k]表示i根从大到小的杆子, 从左边看有l根, 从右边看有r根的方案数. 21 | // 转移的时候考虑最小的杆子的方法 22 | ll dfs(int i, int j, int k) { 23 | // 递归的边界 24 | if (i == 1) { 25 | if (j == 1 && k == 1) return 1; 26 | return 0; 27 | } 28 | // 记忆化 29 | if (dp[i][j][k] != -1) return dp[i][j][k]; 30 | 31 | return dp[i][j][k] = dfs(i - 1, j - 1, k) + dfs(i - 1, j, k - 1) + dfs(i - 1, j, k) * (i - 2); 32 | } 33 | int main() { 34 | std::memset(dp, -1, sizeof dp); 35 | scanf("%lld", &T); 36 | while (T--) { 37 | scanf("%lld %lld %lld", &n, &l, &r); 38 | printf("%lld\n", dfs(n, l, r)); 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /洛谷/省选-/data.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFShare/Algorithm-challenger/43336871a5e48f8804d6e737c813d9d4c0dc2731/洛谷/省选-/data.out -------------------------------------------------------------------------------- /贪心/POJ-1017.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-05 3 | * 4 | */ 5 | 6 | #include 7 | 8 | const int A[] = {0, 5, 3, 1}; 9 | 10 | int main() { 11 | int a, b, c, d, e, f; 12 | while (scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f) && (a + b + c + d + e + f)) { 13 | int ans = 0; 14 | // 6 * 6, 5 * 5, 4 * 4都要单独占用一个箱子 15 | ans += f + e + d; 16 | // 3 * 3单独占用的箱子 17 | ans += (c + 3) / 4; 18 | 19 | // 接着装2 * 2的, 可以来自装4 * 4的箱子剩下的, 也可以来自装3 * 3剩下的 20 | int number_2 = d * (36 - 16) / 4; 21 | number_2 += A[c % 4]; 22 | 23 | if (b > number_2) { 24 | ans += (b - number_2 + 8) / 9; 25 | } 26 | 27 | int number_1 = ans * 36 - 6 * 6 * f - 5 * 5 * e - 4 * 4 * d - 3 * 3 * c - 2 * 2 * b; 28 | if (number_1 < a) { 29 | ans += (a - number_1 + 35) / 36; 30 | } 31 | 32 | printf("%d\n", ans); 33 | } 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /贪心/POJ-1862.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-10 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using namespace std; 12 | 13 | priority_queue s; 14 | 15 | int main() { 16 | int i, n; 17 | scanf("%d", &n); 18 | for(i = 0; i < n; ++i) { 19 | double tmp; 20 | scanf("%lf", &tmp); 21 | s.push(tmp); 22 | } 23 | while(--n) { 24 | double a, b; 25 | a = s.top(); 26 | s.pop(); 27 | b = s.top(); 28 | s. pop(); 29 | s.push(2 * sqrt(a * b)); 30 | } 31 | printf("%.3f\n", s.top()); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /贪心/POJ-2393-tle.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-10 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | const int maxn = 1e4 + 5; 12 | long long n, S; 13 | long long price[maxn], quantity[maxn]; 14 | 15 | int main() { 16 | scanf("%lld %lld", &n, &S); 17 | for (int i = 1; i <= n; ++i) { 18 | scanf("%lld %lld", &price[i], &quantity[i]); 19 | } 20 | // 更新price[j], 每存放一周是S, 二周就是2 * S, ..., N周就是 N * S 21 | for (int j = 1; j <= n; ++j) { 22 | for (int i = 1; i < j; ++i) { 23 | price[j] = std::min(price[j], price[i] + S * (j - i)); 24 | } 25 | } 26 | long long sum = 0; 27 | for (int i = 1; i <= n; ++i) { 28 | sum += price[i] * quantity[i]; 29 | } 30 | printf("%lld\n", sum); 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /贪心/POJ-2393.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-10 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | const int maxn = 1e4 + 5; 12 | long long n, S; 13 | long long price[maxn], quantity[maxn]; 14 | 15 | int main() { 16 | scanf("%lld %lld", &n, &S); 17 | for (int i = 1; i <= n; ++i) { 18 | scanf("%lld %lld", &price[i], &quantity[i]); 19 | } 20 | for (int i = 1; i <= n; ++i) { 21 | if (i == 1) continue; 22 | price[i] = std::min(price[i], price[i - 1] + S * 1); 23 | } 24 | long long sum = 0; 25 | for (int i = 1; i <= n; ++i) { 26 | sum += price[i] * quantity[i]; 27 | } 28 | printf("%lld\n", sum); 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /贪心/POJ-3262.cc: -------------------------------------------------------------------------------- 1 | /* 2 | * Created by OFShare on 2019-12-10 3 | * 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | using namespace std; 11 | 12 | typedef pair pii; 13 | 14 | pii c[100010]; 15 | 16 | bool cmp(const pii a, const pii b) { 17 | return a.first * b.second < a.second * b.first; 18 | } 19 | 20 | int main() { 21 | int n, i; 22 | scanf("%d", &n); 23 | for(i = 0; i < n; ++i) { 24 | scanf("%d%d", &c[i].first, &c[i].second); 25 | } 26 | sort(c, c + n, cmp); 27 | long long ans = 0, t = 0; 28 | for(i = 0; i < n; ++i) { 29 | ans += t * c[i].second; 30 | t += 2 * c[i].first; 31 | } 32 | printf("%lld\n", ans); 33 | return 0; 34 | } 35 | --------------------------------------------------------------------------------