恶臭数字论证器

题目描述

将整数 \(x\) 分解成若干个 \(114514\) 运算得到的结果(可以把 \(114514\) 拆分),多组数据,其中数据组数 \(\le 400,0\le x<2^{31}\).

样例输入

1
1919810

样例输出

(114514+114514)*(11-4+5/1-4)+(114*514+(114*51*4+(1145*(1+4)+11-4+5+1-4)))

代码实现

以下是完整代码。

#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
typedef long long ll;
pair<ll, string> a[550] = {
    mp(229028, "(114514+114514)"),
    mp(114514, "114514"),
    mp(58596, "114*514"),
    mp(49654, "11*4514"),
    mp(45804, "11451*4"),
    mp(23256, "114*51*4"),
    mp(22616, "11*4*514"),
    mp(19844, "11*451*4"),
    mp(16030, "1145*14"),
    mp(14515, "1+14514"),
    mp(14514, "1*14514"),
    mp(14513, "-1+14514"),
    mp(11455, "11451+4"),
    mp(11447, "11451-4"),
    mp(9028, "(1+1)*4514"),
    mp(8976, "11*4*51*4"),
    mp(7980, "114*5*14"),
    mp(7710, "(1+14)*514"),
    mp(7197, "1+14*514"),
    mp(7196, "1*14*514"),
    mp(7195, "-1+14*514"),
    mp(6930, "11*45*14"),
    mp(6682, "(1-14)*-514"),
    mp(6270, "114*(51+4)"),
    mp(5818, "114*51+4"),
    mp(5810, "114*51-4"),
    mp(5808, "(1+1451)*4"),
    mp(5805, "1+1451*4"),
    mp(5804, "1*1451*4"),
    mp(5803, "-1+1451*4"),
    mp(5800, "(1-1451)*-4"),
    mp(5725, "1145*(1+4)"),
    mp(5698, "11*(4+514)"),
    mp(5610, "-11*(4-514)"),
    mp(5358, "114*(51-4)"),
    mp(5005, "11*(451+4)"),
    mp(4965, "11*451+4"),
    mp(4957, "11*451-4"),
    mp(4917, "11*(451-4)"),
    mp(4584, "(1145+1)*4"),
    mp(4580, "1145*1*4"),
    mp(4576, "(1145-1)*4"),
    mp(4525, "11+4514"),
    mp(4516, "1+1+4514"),
    mp(4515, "1+1*4514"),
    mp(4514, "1-1+4514"),
    mp(4513, "-1*1+4514"),
    mp(4512, "-1-1+4514"),
    mp(4503, "-11+4514"),
    mp(4112, "(1+1)*4*514"),
    mp(3608, "(1+1)*451*4"),
    mp(3598, "(11-4)*514"),
    mp(3435, "-1145*(1-4)"),
    mp(3080, "11*4*5*14"),
    mp(3060, "(11+4)*51*4"),
    mp(2857, "1+14*51*4"),
    mp(2856, "1*14*51*4"),
    mp(2855, "-1+14*51*4"),
    mp(2850, "114*5*(1+4)"),
    mp(2736, "114*(5+1)*4"),
    mp(2652, "(1-14)*51*-4"),
    mp(2570, "1*(1+4)*514"),
    mp(2475, "11*45*(1+4)"),
    mp(2420, "11*4*(51+4)"),
    mp(2280, "114*5*1*4"),
    mp(2248, "11*4*51+4"),
    mp(2240, "11*4*51-4"),
    mp(2166, "114*(5+14)"),
    mp(2068, "11*4*(51-4)"),
    mp(2067, "11+4*514"),
    mp(2058, "1+1+4*514"),
    mp(2057, "1/1+4*514"),
    mp(2056, "1/1*4*514"),
    mp(2055, "-1/1+4*514"),
    mp(2054, "-1-1+4*514"),
    mp(2045, "-11+4*514"),
    mp(2044, "(1+145)*14"),
    mp(2031, "1+145*14"),
    mp(2030, "1*145*14"),
    mp(2029, "-1+145*14"),
    mp(2024, "11*(45+1)*4"),
    mp(2016, "-(1-145)*14"),
    mp(1980, "11*45*1*4"),
    mp(1936, "11*(45-1)*4"),
    mp(1848, "(11+451)*4"),
    mp(1824, "114*(5-1)*4"),
    mp(1815, "11+451*4"),
    mp(1808, "1*(1+451)*4"),
    mp(1806, "1+1+451*4"),
    mp(1805, "1+1*451*4"),
    mp(1804, "1-1+451*4"),
    mp(1803, "1*-1+451*4"),
    mp(1802, "-1-1+451*4"),
    mp(1800, "-1*(1-451)*4"),
    mp(1793, "-11+451*4"),
    mp(1760, "-(11-451)*4"),
    mp(1710, "114*-5*(1-4)"),
    mp(1666, "(114+5)*14"),
    mp(1632, "(1+1)*4*51*4"),
    mp(1542, "-1*(1-4)*514"),
    mp(1526, "(114-5)*14"),
    mp(1485, "11*-45*(1-4)"),
    mp(1456, "1+1451+4"),
    mp(1455, "1*1451+4"),
    mp(1454, "-1+1451+4"),
    mp(1448, "1+1451-4"),
    mp(1447, "1*1451-4"),
    mp(1446, "-1+1451-4"),
    mp(1428, "(11-4)*51*4"),
    mp(1386, "11*(4+5)*14"),
    mp(1260, "(1+1)*45*14"),
    mp(1159, "1145+14"),
    mp(1150, "1145+1+4"),
    mp(1149, "1145+1*4"),
    mp(1148, "1145-1+4"),
    mp(1142, "1145+1-4"),
    mp(1141, "1145-1*4"),
    mp(1140, "(1145-1)-4"),
    mp(1131, "1145-14"),
    mp(1100, "11*4*5*(1+4)"),
    mp(1056, "11*4*(5+1)*4"),
    mp(1050, "(11+4)*5*14"),
    mp(1036, "(1+1)*(4+514)"),
    mp(1026, "-114*(5-14)"),
    mp(1020, "1*(1+4)*51*4"),
    mp(981, "1+14*5*14"),
    mp(980, "1*14*5*14"),
    mp(979, "-1+14*5*14"),
    mp(910, "-(1-14)*5*14"),
    mp(906, "(1+1)*451+4"),
    mp(898, "(1+1)*451-4"),
    mp(894, "(1+1)*(451-4)"),
    mp(880, "11*4*5*1*4"),
    mp(836, "11*4*(5+14)"),
    mp(827, "11+4*51*4"),
    mp(825, "(11+4)*(51+4)"),
    mp(818, "1+1+4*51*4"),
    mp(817, "1*1+4*51*4"),
    mp(816, "1*1*4*51*4"),
    mp(815, "-1+1*4*51*4"),
    mp(814, "-1-1+4*51*4"),
    mp(805, "-11+4*51*4"),
    mp(784, "(11+45)*14"),
    mp(771, "1+14*(51+4)"),
    mp(770, "1*14*(51+4)"),
    mp(769, "(11+4)*51+4"),
    mp(761, "(1+14)*51-4"),
    mp(730, "(1+145)*(1+4)"),
    mp(726, "1+145*(1+4)"),
    mp(725, "1*145*(1+4)"),
    mp(724, "-1+145*(1+4)"),
    mp(720, "-(1-145)*(1+4)"),
    mp(719, "1+14*51+4"),
    mp(718, "1*14*51+4"),
    mp(717, "-1-14*-51+4"),
    mp(715, "-(1-14)*(51+4)"),
    mp(711, "1+14*51-4"),
    mp(710, "1*14*51-4"),
    mp(709, "-1+14*51-4"),
    mp(705, "(1+14)*(51-4)"),
    mp(704, "11*4*(5-1)*4"),
    mp(688, "114*(5+1)+4"),
    mp(680, "114*(5+1)-4"),
    mp(667, "-(1-14)*51+4"),
    mp(660, "(114+51)*4"),
    mp(659, "1+14*(51-4)"),
    mp(658, "1*14*(51-4)"),
    mp(657, "-1+14*(51-4)"),
    mp(649, "11*(45+14)"),
    mp(644, "1*(1+45)*14"),
    mp(641, "11+45*14"),
    mp(632, "1+1+45*14"),
    mp(631, "1*1+45*14"),
    mp(630, "1*1*45*14"),
    mp(629, "1*-1+45*14"),
    mp(628, "114+514"),
    mp(619, "-11+45*14"),
    mp(616, "-1*(1-45)*14"),
    mp(612, "-1*(1-4)*51*4"),
    mp(611, "-(1-14)*(51-4)"),
    mp(609, "11*(4+51)+4"),
    mp(601, "11*(4+51)-4"),
    mp(595, "(114+5)*(1+4)"),
    mp(584, "114*5+14"),
    mp(581, "1+145*1*4"),
    mp(580, "1*145/1*4"),
    mp(579, "-1+145*1*4"),
    mp(576, "1*(145-1)*4"),
    mp(575, "114*5+1+4"),
    mp(574, "114*5/1+4"),
    mp(573, "114*5-1+4"),
    mp(567, "114*5+1-4"),
    mp(566, "114*5*1-4"),
    mp(565, "114*5-1-4"),
    mp(561, "11/4*51*4"),
    mp(560, "(1+1)*4*5*14"),
    mp(558, "11*4+514"),
    mp(556, "114*5-14"),
    mp(545, "(114-5)*(1+4)"),
    mp(529, "1+14+514"),
    mp(528, "1*14+514"),
    mp(527, "-1+14+514"),
    mp(522, "(1+1)*4+514"),
    mp(521, "11-4+514"),
    mp(520, "1+1+4+514"),
    mp(519, "1+1*4+514"),
    mp(518, "1-1+4+514"),
    mp(517, "-1+1*4+514"),
    mp(516, "-1-1+4+514"),
    mp(514, "(1-1)/4+514"),
    mp(513, "-11*(4-51)-4"),
    mp(512, "1+1-4+514"),
    mp(511, "1*1-4+514"),
    mp(510, "1-1-4+514"),
    mp(509, "11*45+14"),
    mp(508, "-1-1-4+514"),
    mp(507, "-11+4+514"),
    mp(506, "-(1+1)*4+514"),
    mp(502, "11*(45+1)-4"),
    mp(501, "1-14+514"),
    mp(500, "11*45+1+4"),
    mp(499, "11*45*1+4"),
    mp(498, "11*45-1+4"),
    mp(495, "11*(4+5)*(1+4)"),
    mp(492, "11*45+1-4"),
    mp(491, "11*45-1*4"),
    mp(490, "11*45-1-4"),
    mp(488, "11*(45-1)+4"),
    mp(481, "11*45-14"),
    mp(480, "11*(45-1)-4"),
    mp(476, "(114+5)/1*4"),
    mp(470, "-11*4+514"),
    mp(466, "11+451+4"),
    mp(460, "114*(5-1)+4"),
    mp(458, "11+451-4"),
    mp(457, "1+1+451+4"),
    mp(456, "1*1+451+4"),
    mp(455, "1-1+451+4"),
    mp(454, "-1+1*451+4"),
    mp(453, "-1-1+451+4"),
    mp(452, "114*(5-1)-4"),
    mp(450, "(1+1)*45*(1+4)"),
    mp(449, "1+1+451-4"),
    mp(448, "1+1*451-4"),
    mp(447, "1/1*451-4"),
    mp(446, "1*-1+451-4"),
    mp(445, "-1-1+451-4"),
    mp(444, "-11+451+4"),
    mp(440, "(1+1)*4*(51+4)"),
    mp(438, "-(1+145)*(1-4)"),
    mp(436, "-11+451-4"),
    mp(435, "-1*145*(1-4)"),
    mp(434, "-1-145*(1-4)"),
    mp(432, "(1-145)*(1-4)"),
    mp(412, "(1+1)*4*51+4"),
    mp(404, "(1+1)*4*51-4"),
    mp(400, "-114+514"),
    mp(396, "-11*4*(5-14)"),
    mp(385, "(11-4)*(51+4)"),
    mp(376, "(1+1)*4*(51-4)"),
    mp(375, "(1+14)*5*(1+4)"),
    mp(368, "(1+1)*(45+1)*4"),
    mp(363, "(1+1451)/4"),
    mp(361, "(11-4)*51+4"),
    mp(360, "(1+1)*45*1*4"),
    mp(357, "-(114+5)*(1-4)"),
    mp(353, "(11-4)*51-4"),
    mp(352, "(1+1)*(45-1)*4"),
    mp(351, "1+14*5*(1+4)"),
    mp(350, "1*(1+4)*5*14"),
    mp(349, "-1+14*5*(1+4)"),
    mp(341, "11*(45-14)"),
    mp(337, "1+14*(5+1)*4"),
    mp(336, "1*14*(5+1)*4"),
    mp(335, "-1+14*(5+1)*4"),
    mp(329, "(11-4)*(51-4)"),
    mp(327, "-(114-5)*(1-4)"),
    mp(325, "-(1-14)*5*(1+4)"),
    mp(318, "114+51*4"),
    mp(312, "-(1-14)*(5+1)*4"),
    mp(300, "(11+4)*5/1*4"),
    mp(297, "-11*(4+5)*(1-4)"),
    mp(291, "11+4*5*14"),
    mp(286, "(1145-1)/4"),
    mp(285, "(11+4)*(5+14)"),
    mp(282, "1+1+4*5*14"),
    mp(281, "1+14*5/1*4"),
    mp(280, "1-1+4*5*14"),
    mp(279, "1*-1+4*5*14"),
    mp(278, "-1-1+4*5*14"),
    mp(275, "1*(1+4)*(51+4)"),
    mp(270, "-(1+1)*45*(1-4)"),
    mp(269, "-11+4*5*14"),
    mp(268, "11*4*(5+1)+4"),
    mp(267, "1+14*(5+14)"),
    mp(266, "1*14*(5+14)"),
    mp(265, "-1+14*(5+14)"),
    mp(260, "1*(14+51)*4"),
    mp(259, "1*(1+4)*51+4"),
    mp(257, "(1+1)/4*514"),
    mp(252, "(114-51)*4"),
    mp(251, "1*(1+4)*51-4"),
    mp(248, "11*4+51*4"),
    mp(247, "-(1-14)*(5+14)"),
    mp(240, "(11+4)*(5-1)*4"),
    mp(236, "11+45*(1+4)"),
    mp(235, "1*(1+4)*(51-4)"),
    mp(234, "11*4*5+14"),
    mp(231, "11+4*(51+4)"),
    mp(230, "1*(1+45)*(1+4)"),
    mp(229, "1145/(1+4)"),
    mp(227, "1+1+45*(1+4)"),
    mp(226, "1*1+45*(1+4)"),
    mp(225, "11*4*5+1+4"),
    mp(224, "11*4*5/1+4"),
    mp(223, "11*4*5-1+4"),
    mp(222, "1+1+4*(51+4)"),
    mp(221, "1/1+4*(51+4)"),
    mp(220, "1*1*(4+51)*4"),
    mp(219, "1+14+51*4"),
    mp(218, "1*14+51*4"),
    mp(217, "11*4*5+1-4"),
    mp(216, "11*4*5-1*4"),
    mp(215, "11*4*5-1-4"),
    mp(214, "-11+45*(1+4)"),
    mp(212, "(1+1)*4+51*4"),
    mp(211, "11-4+51*4"),
    mp(210, "1+1+4+51*4"),
    mp(209, "1+1*4*51+4"),
    mp(208, "1*1*4+51*4"),
    mp(207, "-1+1*4*51+4"),
    mp(206, "11*4*5-14"),
    mp(204, "(1-1)/4+51*4"),
    mp(202, "1+1-4+51*4"),
    mp(201, "1/1-4+51*4"),
    mp(200, "1/1*4*51-4"),
    mp(199, "1*-1+4*51-4"),
    mp(198, "-1-1+4*51-4"),
    mp(197, "-11+4+51*4"),
    mp(196, "-(1+1)*4+51*4"),
    mp(195, "(1-14)*5*(1-4)"),
    mp(192, "(1+1)*4*(5+1)*4"),
    mp(191, "1-14+51*4"),
    mp(190, "1*-14+51*4"),
    mp(189, "-11-4+51*4"),
    mp(188, "1-1-(4-51)*4"),
    mp(187, "1/-1+4*(51-4)"),
    mp(186, "1+1+(45+1)*4"),
    mp(185, "1-1*-(45+1)*4"),
    mp(184, "114+5*14"),
    mp(183, "-1+1*(45+1)*4"),
    mp(182, "1+1+45/1*4"),
    mp(181, "1+1*45*1*4"),
    mp(180, "1*1*45*1*4"),
    mp(179, "-1/1+45*1*4"),
    mp(178, "-1-1+45*1*4"),
    mp(177, "1+1*(45-1)*4"),
    mp(176, "1*1*(45-1)*4"),
    mp(175, "-1+1*(45-1)*4"),
    mp(174, "-1-1+(45-1)*4"),
    mp(172, "11*4*(5-1)-4"),
    mp(171, "114*(5+1)/4"),
    mp(170, "-(11-45)*(1+4)"),
    mp(169, "114+51+4"),
    mp(168, "-(11+45)*(1-4)"),
    mp(165, "11*-45/(1-4)"),
    mp(161, "114+51-4"),
    mp(160, "1+145+14"),
    mp(159, "1*145+14"),
    mp(158, "-1+145+14"),
    mp(157, "1*(1-4)*-51+4"),
    mp(154, "11*(4-5)*-14"),
    mp(152, "(1+1)*4*(5+14)"),
    mp(151, "1+145+1+4"),
    mp(150, "1+145*1+4"),
    mp(149, "1*145*1+4"),
    mp(148, "1*145-1+4"),
    mp(147, "-1+145-1+4"),
    mp(146, "11-45*(1-4)"),
    mp(143, "1+145+1-4"),
    mp(142, "1+145*1-4"),
    mp(141, "1+145-1-4"),
    mp(140, "1*145-1-4"),
    mp(139, "-1+145-1-4"),
    mp(138, "-1*(1+45)*(1-4)"),
    mp(137, "1+1-45*(1-4)"),
    mp(136, "1*1-45*(1-4)"),
    mp(135, "-1/1*45*(1-4)"),
    mp(134, "114+5/1*4"),
    mp(133, "114+5+14"),
    mp(132, "1+145-14"),
    mp(131, "1*145-14"),
    mp(130, "-1+145-14"),
    mp(129, "114-5*(1-4)"),
    mp(128, "1+1+(4+5)*14"),
    mp(127, "1-14*(5-14)"),
    mp(126, "1*(14-5)*14"),
    mp(125, "-1-14*(5-14)"),
    mp(124, "114+5+1+4"),
    mp(123, "114-5+14"),
    mp(122, "114+5-1+4"),
    mp(121, "11*(45-1)/4"),
    mp(120, "-(1+1)*4*5*(1-4)"),
    mp(118, "(1+1)*(45+14)"),
    mp(117, "(1-14)*(5-14)"),
    mp(116, "114+5+1-4"),
    mp(115, "114+5*1-4"),
    mp(114, "11*4+5*14"),
    mp(113, "114-5/1+4"),
    mp(112, "114-5-1+4"),
    mp(111, "11+4*5*(1+4)"),
    mp(110, "-(11-451)/4"),
    mp(107, "11+4*(5+1)*4"),
    mp(106, "114-5+1-4"),
    mp(105, "114+5-14"),
    mp(104, "114-5-1-4"),
    mp(103, "11*(4+5)+1*4"),
    mp(102, "11*(4+5)-1+4"),
    mp(101, "1+1*4*5*(1+4)"),
    mp(100, "1*(1+4)*5*1*4"),
    mp(99, "11*4+51+4"),
    mp(98, "1+1+4*(5+1)*4"),
    mp(97, "1+1*4*(5+1)*4"),
    mp(96, "11*(4+5)+1-4"),
    mp(95, "114-5-14"),
    mp(94, "114-5/1*4"),
    mp(93, "(1+1)*45-1+4"),
    mp(92, "(1+1)*(45-1)+4"),
    mp(91, "11*4+51-4"),
    mp(90, "-114+51*4"),
    mp(89, "(1+14)*5+14"),
    mp(88, "1*14*(5+1)+4"),
    mp(87, "11+4*(5+14)"),
    mp(86, "(1+1)*45*1-4"),
    mp(85, "1+14+5*14"),
    mp(84, "1*14+5*14"),
    mp(83, "-1+14+5*14"),
    mp(82, "1+1+4*5/1*4"),
    mp(81, "1/1+4*5*1*4"),
    mp(80, "1-1+4*5*1*4"),
    mp(79, "1*-1+4*5/1*4"),
    mp(78, "(1+1)*4+5*14"),
    mp(77, "11-4+5*14"),
    mp(76, "1+1+4+5*14"),
    mp(75, "1+14*5*1+4"),
    mp(74, "1/1*4+5*14"),
    mp(73, "1*14*5-1+4"),
    mp(72, "-1-1+4+5*14"),
    mp(71, "(1+14)*5-1*4"),
    mp(70, "11+45+14"),
    mp(69, "1*14+51+4"),
    mp(68, "1+1-4+5*14"),
    mp(67, "1-1*4+5*14"),
    mp(66, "1*14*5-1*4"),
    mp(65, "1*14*5-1-4"),
    mp(64, "11*4+5*1*4"),
    mp(63, "11*4+5+14"),
    mp(62, "1+14+51-4"),
    mp(61, "1+1+45+14"),
    mp(60, "11+45*1+4"),
    mp(59, "114-51-4"),
    mp(58, "-1+1*45+14"),
    mp(57, "1+14*5-14"),
    mp(56, "1*14*5-14"),
    mp(55, "-1+14*5-14"),
    mp(54, "11-4+51-4"),
    mp(53, "11+45+1-4"),
    mp(52, "11+45/1-4"),
    mp(51, "11+45-1-4"),
    mp(50, "1+1*45/1+4"),
    mp(49, "1*1*45/1+4"),
    mp(48, "-11+45+14"),
    mp(47, "1/-1+45-1+4"),
    mp(46, "11*4+5+1-4"),
    mp(45, "11+4*5+14"),
    mp(44, "114-5*14"),
    mp(43, "1+1*45+1-4"),
    mp(42, "11+45-14"),
    mp(41, "1/1*45*1-4"),
    mp(40, "-11+4*51/4"),
    mp(39, "-11+45+1+4"),
    mp(38, "-11+45*1+4"),
    mp(37, "-11+45-1+4"),
    mp(36, "11+4*5+1+4"),
    mp(35, "11*4+5-14"),
    mp(34, "1-14+51-4"),
    mp(33, "1+1+45-14"),
    mp(32, "1*1+45-14"),
    mp(31, "1/1*45-14"),
    mp(30, "1*-1+45-14"),
    mp(29, "-11+45-1-4"),
    mp(28, "11+4*5+1-4"),
    mp(27, "11+4*5/1-4"),
    mp(26, "11-4+5+14"),
    mp(25, "11*4-5-14"),
    mp(24, "1+14-5+14"),
    mp(23, "1*14-5+14"),
    mp(22, "1*14+5-1+4"),
    mp(21, "-1-1+4+5+14"),
    mp(20, "-11+45-14"),
    mp(19, "1+1+4*5+1-4"),
    mp(18, "1+1+4*5*1-4"),
    mp(17, "11+4*5-14"),
    mp(16, "11-4-5+14"),
    mp(15, "1+14-5+1+4"),
    mp(14, "11+4-5/1+4"),
    mp(13, "1*14-5/1+4"),
    mp(12, "-11+4+5+14"),
    mp(11, "11*-4+51+4"),
    mp(10, "-11/4+51/4"),
    mp(9, "11-4+5+1-4"),
    mp(8, "11-4+5/1-4"),
    mp(7, "11-4+5-1-4"),
    mp(6, "1-14+5+14"),
    mp(5, "11-4*5+14"),
    mp(4, "-11-4+5+14"),
    mp(3, "11*-4+51-4"),
    mp(2, "-11+4-5+14"),
    mp(1, "11/(45-1)*4"),
    mp(0, "(1-1)*4514")
};
map<ll, string> m;
ll k;
void init() {
    for (ll i = 0; i < 520; i++)
        m[a[i].first] = a[i].second;
}
string ToString(ll x) {
    string res = "";
    while (x) res += x % 10 + '0', x /= 10;
    reverse(res.begin(), res.end());
    return res;
}
ll getminDiv(ll x) {
    for (ll i = 0; i < 519; i++)
        if (x >= a[i].first) 
            return a[i].first;
    return 114514;
}
string dfs(ll x) {
    if (m.count(x)) return ToString(x);
    ll Div = getminDiv(x);
    string res = "";
    res += ToString(Div) + "*(" + dfs(x / Div) + ")+";
    res += "(" + dfs(x % Div) + ")";
    regex reg("\\*\\(1\\)|\\+\\(0\\)$");
    res = regex_replace(res, reg, "");
    return res;
}
ll Replace(ll i, string &x) {
    ll ed = i, num = x[i] - '0';
    while (isdigit(x[++ed])) 
        num = num * 10 + x[ed] - '0';
    x.erase(i, ed - i);
    x.insert(i, m[num]);
    return i + m[num].length();
}
string finisher(string x) {
    for (ll i = 0; i < (ll)x.length(); i++) 
        if (isdigit(x[i])) 
            i = Replace(i, x) - 1;
    regex reg1("[\\*|\\/]\\([^\\+\\-\\(\\)]+\\)");
    regex reg2("([\\*|\\/])\\(([^\\+\\-\\(\\)]+)\\)");
    auto pos = x.cbegin(), end = x.cend();
    smatch mm;
    while (regex_search(pos, end, mm, reg1)) 
        x = regex_replace(x, reg2, "$1$2"), pos = x.cbegin(), end = x.cend();
    reg1 = "[\\+|\\-]\\([^\\(\\)]+\\)[\\+|\\-|\\)]";
    reg2 = "([\\+|\\-])\\(([^\\(\\)]+)\\)([\\+|\\-|\\)])";
    while (regex_search(pos, end, mm, reg1)) 
        x = regex_replace(x, reg2, "$1$2$3"), pos = x.cbegin(), end = x.cend();
    reg1 = "[\\+|\\-]\\(([^\\(\\)]+)\\)$";
    reg2 = "([\\+|\\-])\\(([^\\(\\)]+)\\)$";
    while (regex_search(pos, end, mm, reg1)) 
        x = regex_replace(x, reg2, "$1$2"), pos = x.cbegin(), end = x.cend();
    reg1 = "^\\([^\\(\\)]+?\\)$";
    reg2 = "^\\(([^\\(\\)]+)\\)$";
    if (regex_search(pos, end, mm, reg1)) 
        x = regex_replace(x, reg2, "$1"), pos = x.cbegin(), end = x.cend();
    reg2 = "\\+-";
    while (regex_search(pos, end, mm, reg2)) 
        x = regex_replace(x, reg2, "-"), pos = x.cbegin(), end = x.cend();
    return x;
}
int main() {
    // ios::sync_with_stdio(0); cin.tie(nullptr);
    init();
    int T;
    scanf("%d", &T);
    while (T--) {
        scanf("%lld", &k);
        cout << finisher(dfs(k)) << "\n";
    }
    return 0;
}

参考了这个源码这明明就是直接照抄原代码嘛!!

其实这个是在原来的基础上修了点锅的,比如负号加括号等等。。。

不保证输出字符串长度最短,但是保证结果在 \(\text{int}\) 范围内正确!!!(根据我几十个小时的对拍验证)

好像到 1e15 都是对的,如果改成 __int128 应该可以精确到 long long 范围(

原理大概就是打个表,然后搜索,把 \(x\) 表示成 \(a\times b+c\),其中 \(a\) 是表里面的,而 \(b\)\(c\) 就用相同的方法表示下去...这样就得到一个表达式,但是这个表达式不一定合法,所以再用一堆正则表达式来把不合法的变成合法的。。。

然后没了

另外感觉如果要求表达式长度最短,很难做欸,把原来的数字表示成 114514 进制一定是最短的吗?不一定吧,比如 \(229028\)。还有就是枚举表达式也不好写。。。可能是 NPC 问题,不管他了

posted @ 2023-08-04 16:22  Laijinyi  阅读(378)  评论(0编辑  收藏  举报