2021牛客多校1

比赛中过题情况:
在这里插入图片描述
在这里插入图片描述
历程:一开始先把签到D给切了,然后我开F打表确认猜的结论的正确性,过了。后面是B,一个几何,我和wmd推公式推推推推出来(其实这题应该比F还签到一些 ) 。再之后我去开A,本来想打表找规律,结果根本没有规律,遂直接打了个5000*5000的表,一发AC。然后再H上一直罚坐到结束,结束前cqf干过去了K.

TA Alice and Bob

在这里插入图片描述

在这里插入图片描述
题意:两人博弈,每次一个人从一堆中拿 k 个,同时从另一堆拿 k * s(s >= 0) 个,问谁先不能拿。10000 组数据,N <= 5000

idea:直接预处理所有的情况。设 sg[i][j] 表示第一堆是 i 且第二堆是 j 时的 sg 函数,直接模拟所有取石子转移。注意有一维枚举的是倍数,所以总复杂度是 ??(??^3 log ??),底下跑一段时间可以跑完 N=5000。

#include<bits/stdc++.h>
#define LL long long
using namespace std;

LL a[6000][6000];
LL t,x,y;
int main()
{
	a[3][2] = 2;
a[7][5] = 2;
a[12][9] = 2;
a[15][11] = 2;
a[20][14] = 2;
a[22][17] = 2;
a[32][24] = 2;
a[33][19] = 2;
a[35][26] = 2;
a[38][31] = 2;
a[40][29] = 2;
a[52][42] = 2;
a[53][37] = 2;
a[58][28] = 2;
a[60][45] = 2;
a[62][50] = 2;
a[65][47] = 2;
a[68][55] = 2;
a[70][49] = 2;
a[75][44] = 2;
a[79][57] = 2;
a[86][67] = 2;
a[87][64] = 2;
a[92][72] = 2;
a[99][74] = 2;
a[101][77] = 2;
a[110][83] = 2;
a[113][85] = 2;
a[116][90] = 2;
a[118][82] = 2;
a[123][89] = 2;
a[126][97] = 2;
a[127][95] = 2;
a[129][94] = 2;
a[136][103] = 2;
a[145][108] = 2;
a[146][106] = 2;
a[156][139] = 2;
a[160][122] = 2;
a[161][120] = 2;
a[164][125] = 2;
a[166][112] = 2;
a[174][81] = 2;
a[177][133] = 2;
a[180][138] = 2;
a[182][132] = 2;
a[186][143] = 2;
a[190][142] = 2;
a[195][149] = 2;
a[197][152] = 2;
a[198][135] = 2;
a[199][105] = 2;
a[203][148] = 2;
a[215][168] = 2;
a[218][158] = 2;
a[224][172] = 2;
a[228][171] = 2;
a[229][163] = 2;
a[232][154] = 2;
a[236][185] = 2;
a[239][141] = 2;
a[241][192] = 2;
a[246][115] = 2;
a[253][184] = 2;
a[256][194] = 2;
a[259][189] = 2;
a[264][208] = 2;
a[266][201] = 2;
a[268][188] = 2;
a[271][210] = 2;
a[274][207] = 2;
a[278][214] = 2;
a[280][221] = 2;
a[281][205] = 2;
a[286][170] = 2;
a[289][217] = 2;
a[298][179] = 2;
a[301][226] = 2;
a[305][252] = 2;
a[306][248] = 2;
a[307][234] = 2;
a[309][131] = 2;
a[313][245] = 2;
a[315][223] = 2;
a[317][213] = 2;
a[321][250] = 2;
a[322][212] = 2;
a[325][244] = 2;
a[327][220] = 2;
a[332][231] = 2;
a[339][255] = 2;
a[340][151] = 2;
a[346][261] = 2;
a[350][176] = 2;
a[358][276] = 2;
a[359][263] = 2;
a[362][285] = 2;
a[367][293] = 2;
a[370][283] = 2;
a[372][238] = 2;
a[375][270] = 2;
a[379][288] = 2;
a[386][296] = 2;
a[390][295] = 2;
a[391][243] = 2;
a[408][319] = 2;
a[411][312] = 2;
a[415][303] = 2;
a[432][300] = 2;
a[435][329] = 2;
a[445][345] = 2;
a[446][343] = 2;
a[449][338] = 2;
a[454][334] = 2;
a[456][291] = 2;
a[461][352] = 2;
a[464][311] = 2;
a[467][349] = 2;
a[470][384] = 2;
a[474][395] = 2;
a[478][361] = 2;
a[479][357] = 2;
a[483][400] = 2;
a[485][388] = 2;
a[487][399] = 2;
a[489][337] = 2;
a[494][364] = 2;
a[496][342] = 2;
a[501][324] = 2;
a[505][377] = 2;
a[509][374] = 2;
a[511][397] = 2;
a[518][393] = 2;
a[520][369] = 2;
a[521][273] = 2;
a[525][423] = 2;
a[527][366] = 2;
a[529][421] = 2;
a[530][407] = 2;
a[531][405] = 2;
a[532][356] = 2;
a[537][413] = 2;
a[541][420] = 2;
a[545][336] = 2;
a[549][434] = 2;
a[553][382] = 2;
a[556][443] = 2;
a[557][419] = 2;
a[558][348] = 2;
a[560][427] = 2;
a[565][258] = 2;
a[568][410] = 2;
a[570][431] = 2;
a[574][437] = 2;
a[577][355] = 2;
a[580][425] = 2;
a[586][417] = 2;
a[588][402] = 2;
a[590][354] = 2;
a[596][460] = 2;
a[600][440] = 2;
a[601][404] = 2;
a[603][439] = 2;
a[610][469] = 2;
a[614][448] = 2;
a[620][453] = 2;
a[624][430] = 2;
a[632][473] = 2;
a[635][492] = 2;
a[639][381] = 2;
a[646][499] = 2;
a[648][508] = 2;
a[649][504] = 2;
a[651][452] = 2;
a[653][503] = 2;
a[658][516] = 2;
a[660][481] = 2;
a[661][463] = 2;
a[664][515] = 2;
a[666][466] = 2;
a[671][459] = 2;
a[673][498] = 2;
a[683][442] = 2;
a[691][477] = 2;
a[693][564] = 2;
a[697][551] = 2;
a[702][331] = 2;
a[711][555] = 2;
a[716][514] = 2;
a[719][429] = 2;
a[722][595] = 2;
a[723][543] = 2;
a[726][491] = 2;
a[735][540] = 2;
a[737][567] = 2;
a[740][523] = 2;
a[744][572] = 2;
a[748][585] = 2;
a[752][539] = 2;
a[760][476] = 2;
a[761][472] = 2;
a[766][576] = 2;
a[768][583] = 2;
a[771][563] = 2;
a[772][458] = 2;
a[776][513] = 2;
a[778][634] = 2;
a[780][579] = 2;
a[785][628] = 2;
a[787][619] = 2;
a[788][507] = 2;
a[799][626] = 2;
a[800][548] = 2;
a[805][594] = 2;
a[810][607] = 2;
a[811][593] = 2;
a[818][622] = 2;
a[822][617] = 2;
a[825][547] = 2;
a[827][644] = 2;
a[828][599] = 2;
a[831][616] = 2;
a[836][630] = 2;
a[842][612] = 2;
a[845][606] = 2;
a[849][609] = 2;
a[855][535] = 2;
a[857][676] = 2;
a[866][605] = 2;
a[869][685] = 2;
a[870][663] = 2;
a[871][451] = 2;
a[876][657] = 2;
a[877][592] = 2;
a[879][637] = 2;
a[883][695] = 2;
a[886][641] = 2;
a[892][710] = 2;
a[893][534] = 2;
a[896][680] = 2;
a[899][643] = 2;
a[904][679] = 2;
a[910][706] = 2;
a[912][678] = 2;
a[917][730] = 2;
a[918][656] = 2;
a[920][689] = 2;
a[924][732] = 2;
a[929][669] = 2;
a[935][714] = 2;
a[937][700] = 2;
a[944][751] = 2;
a[946][699] = 2;
a[948][704] = 2;
a[956][794] = 2;
a[957][708] = 2;
a[964][687] = 2;
a[969][718] = 2;
a[976][721] = 2;
a[982][750] = 2;
a[985][675] = 2;
a[986][582] = 2;
a[989][668] = 2;
a[991][763] = 2;
a[995][757] = 2;
a[996][713] = 2;
a[1000][747] = 2;
a[1007][743] = 2;
a[1010][728] = 2;
a[1013][756] = 2;
a[1017][774] = 2;
a[1020][754] = 2;
a[1023][797] = 2;
a[1029][796] = 2;
a[1032][782] = 2;
a[1036][742] = 2;
a[1038][765] = 2;
a[1040][816] = 2;
a[1046][655] = 2;
a[1053][833] = 2;
a[1055][864] = 2;
a[1061][791] = 2;
a[1062][739] = 2;
a[1065][746] = 2;
a[1070][824] = 2;
a[1072][803] = 2;
a[1076][853] = 2;
a[1079][808] = 2;
a[1081][807] = 2;
a[1082][790] = 2;
a[1085][784] = 2;
a[1090][793] = 2;
a[1098][830] = 2;
a[1102][875] = 2;
a[1106][852] = 2;
a[1107][682] = 2;
a[1110][815] = 2;
a[1117][814] = 2;
a[1118][813] = 2;
a[1120][848] = 2;
a[1122][835] = 2;
a[1130][863] = 2;
a[1131][820] = 2;
a[1145][859] = 2;
a[1150][770] = 2;
a[1156][868] = 2;
a[1164][885] = 2;
a[1165][839] = 2;
a[1167][734] = 2;
a[1175][882] = 2;
a[1180][862] = 2;
a[1186][890] = 2;
a[1190][851] = 2;
a[1192][888] = 2;
a[1194][881] = 2;
a[1201][838] = 2;
a[1202][562] = 2;
a[1206][861] = 2;
a[1208][906] = 2;
a[1211][902] = 2;
a[1212][874] = 2;
a[1214][915] = 2;
a[1219][943] = 2;
a[1225][847] = 2;
a[1227][898] = 2;
a[1231][909] = 2;
a[1241][844] = 2;
a[1243][927] = 2;
a[1245][914] = 2;
a[1248][973] = 2;
a[1254][954] = 2;
a[1261][908] = 2;
a[1265][950] = 2;
a[1268][940] = 2;
a[1269][923] = 2;
a[1274][931] = 2;
a[1279][967] = 2;
a[1284][978] = 2;
a[1285][895] = 2;
a[1292][1027] = 2;
a[1295][963] = 2;
a[1297][960] = 2;
a[1302][972] = 2;
a[1307][933] = 2;
a[1311][959] = 2;
a[1314][952] = 2;
a[1317][984] = 2;
a[1322][841] = 2;
a[1329][994] = 2;
a[1331][1051] = 2;
a[1334][1043] = 2;
a[1336][1002] = 2;
a[1337][971] = 2;
a[1346][1006] = 2;
a[1348][981] = 2;
a[1358][725] = 2;
a[1361][1012] = 2;
a[1363][926] = 2;
a[1366][1009] = 2;
a[1371][1035] = 2;
a[1372][999] = 2;
a[1376][1025] = 2;
a[1378][993] = 2;
a[1381][942] = 2;
a[1384][873] = 2;
a[1387][1045] = 2;
a[1389][1034] = 2;
a[1390][966] = 2;
a[1394][922] = 2;
a[1397][1089] = 2;
a[1400][1005] = 2;
a[1403][1144] = 2;
a[1405][939] = 2;
a[1408][1060] = 2;
a[1413][1069] = 2;
a[1414][1058] = 2;
a[1419][1019] = 2;
a[1420][962] = 2;
a[1425][1100] = 2;
a[1428][1078] = 2;
a[1432][1016] = 2;
a[1438][1140] = 2;
a[1443][1096] = 2;
a[1446][1064] = 2;
a[1449][1125] = 2;
a[1451][988] = 2;
a[1455][1094] = 2;
a[1457][1088] = 2;
a[1458][1048] = 2;
a[1461][1004] = 2;
a[1464][1104] = 2;
a[1465][1015] = 2;
a[1468][1092] = 2;
a[1470][1143] = 2;
a[1477][1022] = 2;
a[1481][1109] = 2;
a[1484][1116] = 2;
a[1491][1174] = 2;
a[1492][1075] = 2;
a[1499][1087] = 2;
a[1502][1137] = 2;
a[1509][1134] = 2;
a[1510][1124] = 2;
a[1514][1074] = 2;
a[1516][1129] = 2;
a[1521][1068] = 2;
a[1525][1161] = 2;
a[1527][1042] = 2;
a[1529][1159] = 2;
a[1532][1136] = 2;
a[1534][1155] = 2;
a[1536][1153] = 2;
a[1537][1139] = 2;
a[1539][1113] = 2;
a[1541][1152] = 2;
a[1543][1067] = 2;
a[1547][980] = 2;
a[1560][1183] = 2;
a[1561][1169] = 2;
a[1563][1142] = 2;
a[1569][1158] = 2;
a[1575][1133] = 2;
a[1577][1178] = 2;
a[1580][1239] = 2;
a[1581][1149] = 2;
a[1590][1197] = 2;
a[1592][1163] = 2;
a[1599][598] = 2;
a[1605][1247] = 2;
a[1606][1112] = 2;
a[1611][1188] = 2;
a[1612][1171] = 2;
a[1617][1229] = 2;
a[1619][1173] = 2;
a[1622][1238] = 2;
a[1625][1217] = 2;
a[1626][1127] = 2;
a[1633][1031] = 2;
a[1636][1200] = 2;
a[1640][1221] = 2;
a[1643][1237] = 2;
a[1651][1236] = 2;
a[1653][1199] = 2;
a[1661][1258] = 2;
a[1664][1283] = 2;
a[1665][1185] = 2;
a[1674][1148] = 2;
a[1678][1235] = 2;
a[1679][1204] = 2;
a[1682][1281] = 2;
a[1684][1290] = 2;
a[1687][1084] = 2;
a[1692][1278] = 2;
a[1694][1276] = 2;
a[1695][1057] = 2;
a[1702][1289] = 2;
a[1707][1272] = 2;
a[1708][1260] = 2;
a[1710][1301] = 2;
a[1713][1264] = 2;
a[1717][1224] = 2;
a[1721][1253] = 2;
a[1729][1327] = 2;
a[1730][1233] = 2;
a[1736][1216] = 2;
a[1746][1251] = 2;
a[1754][1320] = 2;
a[1756][1300] = 2;
a[1758][1115] = 2;
a[1762][1357] = 2;
a[1765][1305] = 2;
a[1767][1316] = 2;
a[1769][1263] = 2;
a[1772][1418] = 2;
a[1774][1310] = 2;
a[1777][802] = 2;
a[1782][1344] = 2;
a[1785][1340] = 2;
a[1787][1325] = 2;
a[1795][1267] = 2;
a[1799][1257] = 2;
a[1802][1343] = 2;
a[1811][1319] = 2;
a[1812][998] = 2;
a[1820][1250] = 2;
a[1822][1339] = 2;
a[1824][1380] = 2;
a[1825][1304] = 2;
a[1831][1354] = 2;
a[1832][1309] = 2;
a[1837][1430] = 2;
a[1838][1360] = 2;
a[1842][1352] = 2;
a[1845][1299] = 2;
a[1847][1416] = 2;
a[1850][1342] = 2;
a[1854][759] = 2;
a[1859][1370] = 2;
a[1863][1392] = 2;
a[1866][1294] = 2;
a[1869][1442] = 2;
a[1877][1410] = 2;
a[1878][1369] = 2;
a[1879][1365] = 2;
a[1882][1287] = 2;
a[1884][1368] = 2;
a[1888][1356] = 2;
a[1901][1396] = 2;
a[1904][1386] = 2;
a[1906][1196] = 2;
a[1914][1407] = 2;
a[1919][1383] = 2;
a[1922][1475] = 2;
a[1923][1437] = 2;
a[1929][1223] = 2;
a[1935][1422] = 2;
a[1941][1480] = 2;
a[1942][1472] = 2;
a[1947][1460] = 2;
a[1949][1448] = 2;
a[1953][1436] = 2;
a[1964][1495] = 2;
a[1966][1402] = 2;
a[1970][1505] = 2;
a[1972][1520] = 2;
a[1975][1434] = 2;
a[1978][1399] = 2;
a[1981][1508] = 2;
a[1986][1504] = 2;
a[1992][1494] = 2;
a[1994][1441] = 2;
a[1997][1497] = 2;
a[2001][1571] = 2;
a[2003][1507] = 2;
a[2004][1271] = 2;
a[2007][1453] = 2;
a[2011][1463] = 2;
a[2018][901] = 2;
a[2026][1487] = 2;
a[2029][1555] = 2;
a[2030][1490] = 2;
a[2031][1479] = 2;
a[2033][1554] = 2;
a[2036][1375] = 2;
a[2040][1424] = 2;
a[2042][1412] = 2;
a[2050][1566] = 2;
a[2051][1440] = 2;
a[2056][1546] = 2;
a[2059][1524] = 2;
a[2067][1565] = 2;
a[2070][1551] = 2;
a[2076][1531] = 2;
a[2077][1177] = 2;
a[2080][1589] = 2;
a[2085][1597] = 2;
a[2088][1513] = 2;
a[2094][1550] = 2;
a[2096][1518] = 2;
a[2098][1501] = 2;
a[2100][1588] = 2;
a[2103][1579] = 2;
a[2105][1568] = 2;
a[2107][1489] = 2;
a[2116][1557] = 2;
a[2129][1553] = 2;
a[2132][1704] = 2;
a[2134][1483] = 2;
a[2137][1587] = 2;
a[2140][1333] = 2;
a[2142][1604] = 2;
a[2145][1630] = 2;
a[2148][1586] = 2;
a[2152][1603] = 2;
a[2161][1574] = 2;
a[2163][1741] = 2;
a[2168][1594] = 2;
a[2174][1670] = 2;
a[2176][1616] = 2;
a[2180][1584] = 2;
a[2182][1657] = 2;
a[2184][1621] = 2;
a[2191][1512] = 2;
a[2193][1663] = 2;
a[2194][1628] = 2;
a[2195][1601] = 2;
a[2198][1614] = 2;
a[2202][1673] = 2;
a[2203][1610] = 2;
a[2205][1474] = 2;
a[2209][1445] = 2;
a[2215][1256] = 2;
a[2217][1659] = 2;
a[2222][1691] = 2;
a[2224][1642] = 2;
a[2229][1638] = 2;
a[2230][1467] = 2;
a[2234][1701] = 2;
a[2237][1690] = 2;
a[2239][1650] = 2;
a[2246][1712] = 2;
a[2254][1751] = 2;
a[2255][1648] = 2;
a[2256][1573] = 2;
a[2261][1700] = 2;
a[2268][1699] = 2;
a[2271][1681] = 2;
a[2276][1647] = 2;
a[2281][1609] = 2;
a[2283][1728] = 2;
a[2287][1706] = 2;
a[2288][1351] = 2;
a[2293][1672] = 2;
a[2297][1698] = 2;
a[2298][1646] = 2;
a[2302][1635] = 2;
a[2310][1655] = 2;
a[2317][1761] = 2;
a[2318][1745] = 2;
a[2322][1724] = 2;
a[2329][1608] = 2;
a[2332][1805] = 2;
a[2335][1726] = 2;
a[2338][1583] = 2;
a[2341][1719] = 2;
a[2345][1753] = 2;
a[2347][1676] = 2;
a[2350][1744] = 2;
a[2356][1669] = 2;
a[2358][1790] = 2;
a[2362][1743] = 2;
a[2365][1814] = 2;
a[2366][1668] = 2;
a[2368][1723] = 2;
a[2369][1050] = 2;
a[2375][1798] = 2;
a[2376][1732] = 2;
a[2381][1776] = 2;
a[2385][1781] = 2;
a[2388][1324] = 2;
a[2390][1545] = 2;
a[2393][1792] = 2;
a[2395][1873] = 2;
a[2398][1818] = 2;
a[2400][1817] = 2;
a[2402][1789] = 2;
a[2404][1794] = 2;
a[2406][1764] = 2;
a[2411][1780] = 2;
a[2415][1830] = 2;
a[2420][1808] = 2;
a[2421][1549] = 2;
a[2426][1760] = 2;
a[2427][1738] = 2;
a[2435][1807] = 2;
a[2437][1689] = 2;
a[2439][1716] = 2;
a[2444][1858] = 2;
a[2449][1784] = 2;
a[2453][1749] = 2;
a[2455][1210] = 2;
a[2459][1835] = 2;
a[2462][1891] = 2;
a[2469][1828] = 2;
a[2473][1810] = 2;
a[2485][1849] = 2;
a[2490][1740] = 2;
a[2492][1927] = 2;
a[2493][1844] = 2;
a[2495][1735] = 2;
a[2502][1876] = 2;
a[2505][1871] = 2;
a[2509][1909] = 2;
a[2511][1897] = 2;
a[2513][1865] = 2;
a[2515][1900] = 2;
a[2516][1804] = 2;
a[2523][1841] = 2;
a[2525][1890] = 2;
a[2530][1913] = 2;
a[2538][1771] = 2;
a[2546][1989] = 2;
a[2548][1940] = 2;
a[2549][1926] = 2;
a[2550][1925] = 2;
a[2551][1857] = 2;
a[2556][2013] = 2;
a[2557][1779] = 2;
a[2564][1911] = 2;
a[2567][1903] = 2;
a[2570][1938] = 2;
a[2572][1894] = 2;
a[2575][1917] = 2;
a[2576][1881] = 2;
a[2592][1916] = 2;
a[2597][1937] = 2;
a[2600][1899] = 2;
a[2604][1147] = 2;
a[2607][1715] = 2;
a[2611][1974] = 2;
a[2613][1862] = 2;
a[2616][1959] = 2;
a[2623][1182] = 2;
a[2627][2039] = 2;
a[2632][1958] = 2;
a[2634][1834] = 2;
a[2640][1667] = 2;
a[2642][1934] = 2;
a[2645][1983] = 2;
a[2647][1956] = 2;
a[2657][1486] = 2;
a[2661][1944] = 2;
a[2665][1933] = 2;
a[2668][2048] = 2;
a[2669][1624] = 2;
a[2671][2025] = 2;
a[2673][1977] = 2;
a[2675][1955] = 2;
a[2682][2009] = 2;
a[2684][2016] = 2;
a[2687][1988] = 2;
a[2689][1952] = 2;
a[2691][1969] = 2;
a[2700][1932] = 2;
a[2702][2021] = 2;
a[2704][1999] = 2;
a[2707][1991] = 2;
a[2708][1921] = 2;
a[2709][1896] = 2;
a[2720][1856] = 2;
a[2729][2015] = 2;
a[2733][2058] = 2;
a[2738][1985] = 2;
a[2743][1893] = 2;
a[2746][2092] = 2;
a[2747][2055] = 2;
a[2749][2047] = 2;
a[2751][1840] = 2;
a[2754][2066] = 2;
a[2758][2111] = 2;
a[2759][2062] = 2;
a[2761][1963] = 2;
a[2768][2091] = 2;
a[2773][1886] = 2;
a[2778][2128] = 2;
a[2779][2023] = 2;
a[2780][1996] = 2;
a[2785][2045] = 2;
a[2788][2119] = 2;
a[2789][1951] = 2;
a[2792][2165] = 2;
a[2798][2087] = 2;
a[2804][2114] = 2;
a[2806][2064] = 2;
a[2809][2074] = 2;
a[2810][1313] = 2;
a[2814][2158] = 2;
a[2816][2072] = 2;
a[2826][2126] = 2;
a[2830][1875] = 2;
a[2832][2038] = 2;
a[2834][2125] = 2;
a[2836][1374] = 2;
a[2840][1350] = 2;
a[2843][2173] = 2;
a[2846][2187] = 2;
a[2850][2079] = 2;
a[2856][2084] = 2;
a[2862][2155] = 2;
a[2864][2110] = 2;
a[2869][2151] = 2;
a[2873][2170] = 2;
a[2879][1852] = 2;
a[2881][2147] = 2;
a[2882][2139] = 2;
a[2883][2113] = 2;
a[2891][2102] = 2;
a[2899][2124] = 2;
a[2902][2069] = 2;
a[2905][2212] = 2;
a[2910][1797] = 2;
a[2915][2200] = 2;
a[2917][2179] = 2;
a[2919][2160] = 2;
a[2921][2122] = 2;
a[2925][2121] = 2;
a[2927][2178] = 2;
a[2931][1961] = 2;
a[2938][2020] = 2;
a[2943][2167] = 2;
a[2946][2219] = 2;
a[2953][1968] = 2;
a[2954][1645] = 2;
a[2956][2090] = 2;
a[2957][1827] = 2;
a[2960][2236] = 2;
a[2970][2154] = 2;
a[2972][2233] = 2;
a[2974][2244] = 2;
a[2979][2260] = 2;
a[2981][1427] = 2;
a[2985][2189] = 2;
a[2986][1980] = 2;
a[2993][2265] = 2;
a[2997][2228] = 2;
a[3001][2249] = 2;
a[3004][2275] = 2;
a[3006][2270] = 2;
a[3007][2242] = 2;
a[3012][2328] = 2;
a[3015][2227] = 2;
a[3020][2172] = 2;
a[3024][2214] = 2;
a[3026][2253] = 2;
a[3031][2285] = 2;
a[3032][2274] = 2;
a[3036][2208] = 2;
a[3037][2061] = 2;
a[3039][2150] = 2;
a[3046][2267] = 2;
a[3048][2028] = 2;
a[3057][2295] = 2;
a[3061][2241] = 2;
a[3064][2232] = 2;
a[3067][2207] = 2;
a[3078][2006] = 2;
a[3082][2321] = 2;
a[3084][2301] = 2;
a[3089][2252] = 2;
a[3097][2280] = 2;
a[3099][2259] = 2;
a[3101][2354] = 2;
a[3103][2417] = 2;
a[3106][2380] = 2;
a[3110][2258] = 2;
a[3113][2331] = 2;
a[3116][2431] = 2;
a[3117][2324] = 2;
a[3118][2312] = 2;
a[3119][2248] = 2;
a[3121][2044] = 2;
a[3125][2306] = 2;
a[3128][2316] = 2;
a[3130][2308] = 2;
a[3138][2109] = 2;
a[3145][2344] = 2;
a[3148][2251] = 2;
a[3156][1748] = 2;
a[3159][1559] = 2;
a[3163][2305] = 2;
a[3169][2384] = 2;
a[3172][2290] = 2;
a[3177][2374] = 2;
a[3179][2413] = 2;
a[3182][2392] = 2;
a[3190][2409] = 2;
a[3193][2300] = 2;
a[3197][2353] = 2;
a[3201][2383] = 2;
a[3202][2334] = 2;
a[3206][2465] = 2;
a[3207][2083] = 2;
a[3213][2379] = 2;
a[3217][2361] = 2;
a[3218][2320] = 2;
a[3225][2434] = 2;
a[3229][2226] = 2;
a[3232][2452] = 2;
a[3235][1734] = 2;
a[3241][2561] = 2;
a[3244][2197] = 2;
a[3246][2472] = 2;
a[3247][2373] = 2;
a[3250][2326] = 2;
a[3252][1801] = 2;
a[3254][2082] = 2;
a[3258][2423] = 2;
a[3261][2221] = 2;
a[3269][2446] = 2;
a[3273][1861] = 2;
a[3281][2451] = 2;
a[3286][2484] = 2;
a[3287][2479] = 2;
a[3289][2372] = 2;
a[3294][2489] = 2;
a[3297][2488] = 2;
a[3299][2475] = 2;
a[3302][2443] = 2;
a[3303][1523] = 2;
a[3312][2587] = 2;
a[3314][2387] = 2;
a[3317][2442] = 2;
a[3323][2537] = 2;
a[3325][2499] = 2;
a[3327][2441] = 2;
a[3333][2292] = 2;
a[3334][2131] = 2;
a[3335][1686] = 2;
a[3338][2273] = 2;
a[3341][2433] = 2;
a[3343][2586] = 2;
a[3345][2482] = 2;
a[3350][2521] = 2;
a[3351][2457] = 2;
a[3355][2508] = 2;
a[3358][2507] = 2;
a[3359][2408] = 2;
a[3367][2654] = 2;
a[3368][2529] = 2;
a[3372][2595] = 2;
a[3374][2520] = 2;
a[3377][2582] = 2;
a[3379][2533] = 2;
a[3381][2519] = 2;
a[3384][2501] = 2;
a[3385][1596] = 2;
a[3391][2555] = 2;
a[3393][2429] = 2;
a[3395][2554] = 2;
a[3396][2343] = 2;
a[3405][2544] = 2;
a[3409][2594] = 2;
a[3412][2532] = 2;
a[3413][2467] = 2;
a[3418][2626] = 2;
a[3422][2569] = 2;
a[3423][2360] = 2;
a[3425][2314] = 2;
a[3433][2263] = 2;
a[3441][2518] = 2;
a[3449][2652] = 2;
a[3454][2581] = 2;
a[3459][2580] = 2;
a[3460][2304] = 2;
a[3463][2638] = 2;
a[3464][2609] = 2;
a[3466][2599] = 2;
a[3467][2579] = 2;
a[3471][2527] = 2;
a[3475][2585] = 2;
a[3478][2186] = 2;
a[3480][2637] = 2;
a[3488][2543] = 2;
a[3495][2498] = 2;
a[3498][2487] = 2;
a[3500][2481] = 2;
a[3502][2566] = 2;
a[3506][2664] = 2;
a[3508][2630] = 2;
a[3510][2563] = 2;
a[3512][2419] = 2;
a[3518][2606] = 2;
a[3519][2352] = 2;
a[3525][2621] = 2;
a[3529][2680] = 2;
a[3534][2535] = 2;
a[3536][2578] = 2;
a[3538][2560] = 2;
a[3544][2542] = 2;
a[3547][2651] = 2;
a[3549][2718] = 2;
a[3552][2461] = 2;
a[3558][2602] = 2;
a[3560][1632] = 2;
a[3565][2696] = 2;
a[3569][2659] = 2;
a[3570][2340] = 2;
a[3578][2629] = 2;
a[3584][2656] = 2;
a[3585][2371] = 2;
a[3589][2279] = 2;
a[3592][2559] = 2;
a[3598][2478] = 2;
a[3600][2723] = 2;
a[3601][2620] = 2;
a[3605][2619] = 2;
a[3614][2694] = 2;
a[3619][2712] = 2;
a[3621][2644] = 2;
a[3628][2618] = 2;
a[3635][2726] = 2;
a[3638][2699] = 2;
a[3640][2706] = 2;
a[3643][2717] = 2;
a[3647][2742] = 2;
a[3651][2737] = 2;
a[3656][2791] = 2;
a[3658][2679] = 2;
a[3665][2715] = 2;
a[3667][2636] = 2;
a[3671][2650] = 2;
a[3673][2757] = 2;
a[3676][2741] = 2;
a[3681][2782] = 2;
a[3684][2584] = 2;
a[3689][2736] = 2;
a[3693][2541] = 2;
a[3698][2765] = 2;
a[3699][2574] = 2;
a[3704][2802] = 2;
a[3705][2775] = 2;
a[3709][2771] = 2;
a[3712][1816] = 2;
a[3714][2795] = 2;
a[3719][2756] = 2;
a[3720][2678] = 2;
a[3722][2590] = 2;
a[3724][2829] = 2;
a[3727][2732] = 2;
a[3731][2378] = 2;
a[3733][2801] = 2;
a[3737][2867] = 2;
a[3739][2625] = 2;
a[3743][2818] = 2;
a[3748][2677] = 2;
a[3756][2825] = 2;
a[3759][2735] = 2;
a[3762][2800] = 2;
a[3763][2349] = 2;
a[3767][2876] = 2;
a[3769][2808] = 2;
a[3771][2823] = 2;
a[3772][2667] = 2;
a[3776][2861] = 2;
a[3777][2855] = 2;
a[3781][2860] = 2;
a[3787][2813] = 2;
a[3793][2839] = 2;
a[3795][2968] = 2;
a[3798][2941] = 2;
a[3801][2898] = 2;
a[3809][2866] = 2;
a[3810][2397] = 2;
a[3811][2144] = 2;
a[3814][2728] = 2;
a[3821][3076] = 2;
a[3822][2909] = 2;
a[3824][2853] = 2;
a[3825][2767] = 2;
a[3832][2740] = 2;
a[3835][2895] = 2;
a[3838][2540] = 2;
a[3841][2940] = 2;
a[3844][2698] = 2;
a[3848][2812] = 2;
a[3852][2731] = 2;
a[3854][2820] = 2;
a[3859][975] = 2;
a[3862][2794] = 2;
a[3864][2477] = 2;
a[3872][2930] = 2;
a[3877][3066] = 2;
a[3880][2889] = 2;
a[3882][2859] = 2;
a[3886][2849] = 2;
a[3888][2845] = 2;
a[3890][2784] = 2;
a[3896][2967] = 2;
a[3898][2745] = 2;
a[3900][2886] = 2;
a[3907][2875] = 2;
a[3908][2211] = 2;
a[3914][3030] = 2;
a[3916][2912] = 2;
a[3917][2753] = 2;
a[3921][2964] = 2;
a[3923][2936] = 2;
a[3924][2553] = 2;
a[3927][2929] = 2;
a[3932][2848] = 2;
a[3935][2907] = 2;
a[3941][2504] = 2;
a[3944][2950] = 2;
a[3948][2948] = 2;
a[3952][3011] = 2;
a[3955][2858] = 2;
a[3957][2797] = 2;
a[3961][3055] = 2;
a[3965][2996] = 2;
a[3966][2978] = 2;
a[3971][2914] = 2;
a[3974][2770] = 2;
a[3977][2711] = 2;
a[3982][2977] = 2;
a[3991][1868] = 2;
a[3995][2901] = 2;
a[3998][2983] = 2;
a[3999][2838] = 2;
a[4010][3017] = 2;
a[4011][2893] = 2;
a[4012][2777] = 2;
a[4016][3051] = 2;
a[4017][3010] = 2;
a[4018][2693] = 2;
a[4026][3150] = 2;
a[4027][2952] = 2;
a[4030][1931] = 2;
a[4033][3081] = 2;
a[4037][3019] = 2;
a[4038][2364] = 2;
a[4044][2878] = 2;
a[4049][3060] = 2;
a[4051][3043] = 2;
a[4052][2763] = 2;
a[4055][2157] = 2;
a[4057][3074] = 2;
a[4060][3000] = 2;
a[4068][3187] = 2;
a[4070][3035] = 2;
a[4074][2995] = 2;
a[4075][2828] = 2;
a[4079][1908] = 2;
a[4081][2991] = 2;
a[4082][2966] = 2;
a[4089][2649] = 2;
a[4097][3053] = 2;
a[4100][3087] = 2;
a[4103][3023] = 2;
a[4107][3034] = 2;
a[4109][2924] = 2;
a[4111][3041] = 2;
a[4119][3123] = 2;
a[4120][3094] = 2;
a[4121][2990] = 2;
a[4125][2615] = 2;
a[4128][3045] = 2;
a[4135][2934] = 2;
a[4138][2959] = 2;
a[4140][3086] = 2;
a[4141][3029] = 2;
a[4146][3137] = 2;
a[4150][3072] = 2;
a[4151][2976] = 2;
a[4152][2945] = 2;
a[4154][2497] = 2;
a[4160][2963] = 2;
a[4162][2714] = 2;
a[4165][3280] = 2;
a[4169][3153] = 2;
a[4172][3212] = 2;
a[4173][3127] = 2;
a[4176][3028] = 2;
a[4181][3542] = 2;
a[4182][3165] = 2;
a[4184][3133] = 2;
a[4186][2872] = 2;
a[4192][2933] = 2;
a[4195][3136] = 2;
a[4197][2923] = 2;
a[4199][2962] = 2;
a[4209][3147] = 2;
a[4210][3143] = 2;
a[4219][3093] = 2;
a[4222][3115] = 2;
a[4223][3096] = 2;
a[4231][2989] = 2;
a[4234][3092] = 2;
a[4237][3009] = 2;
a[4240][2448] = 2;
a[4243][3158] = 2;
a[4247][3195] = 2;
a[4249][3050] = 2;
a[4253][3152] = 2;
a[4261][3211] = 2;
a[4262][3140] = 2;
a[4263][3080] = 2;
a[4270][3278] = 2;
a[4271][3175] = 2;
a[4272][3162] = 2;
a[4277][3216] = 2;
a[4278][3069] = 2;
a[4288][3320] = 2;
a[4290][3265] = 2;
a[4291][3189] = 2;
a[4296][3192] = 2;
a[4298][3331] = 2;
a[4300][3181] = 2;
a[4302][3003] = 2;
a[4305][3239] = 2;
a[4307][3204] = 2;
a[4310][3272] = 2;
a[4314][3215] = 2;
a[4317][3337] = 2;
a[4319][3221] = 2;
a[4324][3105] = 2;
a[4330][3063] = 2;
a[4336][2904] = 2;
a[4338][3209] = 2;
a[4341][3285] = 2;
a[4343][3220] = 2;
a[4345][3257] = 2;
a[4348][3199] = 2;
a[4356][3275] = 2;
a[4361][3168] = 2;
a[4363][2999] = 2;
a[4372][3400] = 2;
a[4373][3234] = 2;
a[4375][3237] = 2;
a[4383][3361] = 2;
a[4384][3310] = 2;
a[4390][2871] = 2;
a[4395][3184] = 2;
a[4398][3432] = 2;
a[4399][3387] = 2;
a[4416][3329] = 2;
a[4425][3231] = 2;
a[4428][3607] = 2;
a[4429][3132] = 2;
a[4434][3404] = 2;
a[4437][3453] = 2;
a[4438][3383] = 2;
a[4442][3309] = 2;
a[4443][3014] = 2;
a[4446][3228] = 2;
a[4447][3091] = 2;
a[4449][3108] = 2;
a[4452][3308] = 2;
a[4453][3306] = 2;
a[4454][3249] = 2;
a[4466][3316] = 2;
a[4468][3399] = 2;
a[4471][3256] = 2;
a[4473][3293] = 2;
a[4478][3430] = 2;
a[4479][2725] = 2;
a[4487][3438] = 2;
a[4489][3407] = 2;
a[4493][3291] = 2;
a[4495][3227] = 2;
a[4503][3112] = 2;
a[4506][3224] = 2;
a[4507][2425] = 2;
a[4511][3322] = 2;
a[4519][3357] = 2;
a[4522][3364] = 2;
a[4523][3349] = 2;
a[4525][3366] = 2;
a[4526][3283] = 2;
a[4528][3243] = 2;
a[4532][3398] = 2;
a[4539][3277] = 2;
a[4543][3171] = 2;
a[4546][3296] = 2;
a[4547][3268] = 2;
a[4549][3271] = 2;
a[4550][2852] = 2;
a[4552][3371] = 2;
a[4559][3402] = 2;
a[4563][3167] = 2;
a[4567][3452] = 2;
a[4571][3443] = 2;
a[4572][1697] = 2;
a[4578][3469] = 2;
a[4579][3411] = 2;
a[4581][3264] = 2;
a[4586][3596] = 2;
a[4593][2035] = 2;
a[4595][3458] = 2;
a[4599][3448] = 2;
a[4601][3436] = 2;
a[4605][3429] = 2;
a[4608][2787] = 2;
a[4610][3260] = 2;
a[4619][2663] = 2;
a[4621][3486] = 2;
a[4622][3390] = 2;
a[4628][3483] = 2;
a[4631][3421] = 2;
a[4635][3348] = 2;
a[4644][3568] = 2;
a[4650][3370] = 2;
a[4652][3613] = 2;
a[4657][3521] = 2;
a[4660][3482] = 2;
a[4663][3347] = 2;
a[4670][3447] = 2;
a[4674][3492] = 2;
a[4675][3446] = 2;
a[4678][3301] = 2;
a[4681][3497] = 2;
a[4683][3174] = 2;
a[4690][3435] = 2;
a[4691][3428] = 2;
a[4700][3059] = 2;
a[4705][3562] = 2;
a[4706][2118] = 2;
a[4708][3477] = 2;
a[4712][3440] = 2;
a[4717][3491] = 2;
a[4722][3532] = 2;
a[4725][3417] = 2;
a[4732][3750] = 2;
a[4733][3485] = 2;
a[4740][3577] = 2;
a[4742][3515] = 2;
a[4744][3354] = 2;
a[4745][2842] = 2;
a[4751][3517] = 2;
a[4761][3528] = 2;
a[4763][3524] = 2;
a[4765][3625] = 2;
a[4768][3580] = 2;
a[4771][3663] = 2;
a[4772][3595] = 2;
a[4773][3551] = 2;
a[4775][3686] = 2;
a[4778][3583] = 2;
a[4779][2988] = 2;
a[4782][2897] = 2;
a[4786][3574] = 2;
a[4789][3540] = 2;
a[4801][3609] = 2;
a[4803][3457] = 2;
a[4805][2053] = 2;
a[4807][3634] = 2;
a[4809][3494] = 2;
a[4810][3415] = 2;
a[4814][3645] = 2;
a[4815][2722] = 2;
a[4818][3594] = 2;
a[4821][3623] = 2;
a[4832][3557] = 2;
a[4836][3514] = 2;
a[4839][3603] = 2;
a[4845][3637] = 2;
a[4847][3505] = 2;
a[4850][3555] = 2;
a[4856][3474] = 2;
a[4865][3669] = 2;
a[4871][3617] = 2;
a[4876][3527] = 2;
a[4878][3662] = 2;
a[4882][3490] = 2;
a[4888][3675] = 2;
a[4889][3612] = 2;
a[4892][3473] = 2;
a[4897][3427] = 2;
a[4903][3717] = 2;
a[4907][3655] = 2;
a[4914][3389] = 2;
a[4921][3576] = 2;
a[4926][3633] = 2;
a[4928][3591] = 2;
a[4932][3726] = 2;
a[4935][3631] = 2;
a[4939][3616] = 2;
a[4941][3567] = 2;
a[4945][3462] = 2;
a[4948][3692] = 2;
a[4953][3753] = 2;
a[4956][3680] = 2;
a[4959][3654] = 2;
a[4967][3588] = 2;
a[4969][3531] = 2;
a[4972][3661] = 2;
a[4977][3642] = 2;
a[4979][3582] = 2;
a[4992][3223] = 2;
a[5000][3742] = 2;

	cin>>t;
	while( t-- )
	{
		scanf("%lld %lld",&x,&y);
		if( x<y ) swap(x,y);
		if( a[x][y]==2 ) printf("Bob\n");
		else printf("Alice\n");
	}
	return 0;
}

TB Ball Dropping

在这里插入图片描述
题意:一个球卡在一个直角等腰梯形内部,求卡着的高度。

idea:几何推公式

#include<bits/stdc++.h>
using namespace std;

double r,a,b,h;

int main()
{
	cin>>r>>a>>b>>h;
	if( (int)2*r<(int)b )
	{
		cout<<"Drop";
		return 0;
	}
	double t =  ( sqrt( ( (b*h)/( a-b ) + h ) * ( (b*h)/( a-b ) + h ) + a*a/4.0 ) * 2.0 * r ) / a - (b*h)/( a-b );
	cout<<"Stuck"<<endl;
	printf("%.8lf",t);
	return 0;
}

TF
在这里插入图片描述
在这里插入图片描述
题意:定义一个自然数是 3-friendly 的,如果它存在一个子串(允许前导0)是 3 的倍数。多组数据,求 L~R 中 3-friendly 的数的个数。

idea:根据鸽巢原理,n>=100 时必然合法。只要位数不少于 3 位,必然出现一组前缀和 %3 相同的位置,所以他们这段区间必然 %3 = 0。
不允许前导 0 也能得出一样的结论。因为只要出现 0,单个的 0 就直接合法了。
这样我们只要对 <100 的 n 暴力即可。

#include<bits/stdc++.h>
#define LL long long
using namespace std;

LL t,l,r;
LL a[1000];
int main()
{
a[1] = 1;
a[2] = 2;
a[4] = 4;
a[5] = 5;
a[7] = 7;
a[8] = 8;
a[11] = 11;
a[14] = 14;
a[17] = 17;
a[22] = 22;
a[25] = 25;
a[28] = 28;
a[41] = 41;
a[44] = 44;
a[47] = 47;
a[52] = 52;
a[55] = 55;
a[58] = 58;
a[71] = 71;
a[74] = 74;
a[77] = 77;
a[82] = 82;
a[85] = 85;
a[88] = 88;
	cin>>t;
	while( t-- )
	{ 	LL ans = 0 ;
		scanf("%lld %lld",&l,&r);
		ans = r-l+1;
		for(LL i=l;i<=r&&i<=100;i++)
		{
			if( a[i]!=0 )
			{
				ans--;
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}

补题:

TE Escape along Water Pipe

题意:给出一个 n*m 的水管图,要从 (1,1) 顶部走到 (n,m) 底部。每走一步前,可以选择一个管道集合旋转相同的角度。要求在 20nm 步前走到终点或者输出无解。

idea:

整个图可视为无状态的
虽然每个格子有当前的角度,但是旋转操作的任意性使得你无须关注每个格子当前的状态(当然输出答案的时候需要继承状态的)。
既然是无状态的,总情况从指数级降低成 O(N^2 )。
集合选取没有意义,每次只要旋转下一个要去的格子就行了。
理论经过的格子数是 4nm,操作数是 8nm,因为到达每个格子时有四种方向。
对所有状态进行记忆化搜索/宽搜。输出方案的时候需要模拟一下方向。

不想多说了,改麻了…

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define LL long long
#define N 1001
using namespace std;
int g[6][2] = { {3,0} , {1,0} , {2,1} , {3,2} , {3,1} , {2,1} };
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n,m,t,a[N][N];
bool pd[N][N][4][4];
int tot = 0;

struct node2
{
	int x,y,lnum,tag[3];
}last[16000000];

struct node
{
	int lx,ly,la,num,lnum;
	int x,y;
	int tag[3],ltag[3];
}u,v,first[N][N];


bool judge(  )
{
	int aa[4]={0},bb[4]={0};
	aa[ u.tag[1] ] = aa[ u.tag[2] ] = 1;
	bb[ v.tag[1] ] = bb[ v.tag[2] ] = 1;
	if( u.y==v.y )
	{
		if( aa[2]==1 && bb[0]==1 ) return true;
		if( u.x!=0 && u.y!=1 && bb[2]==1 && aa[0]==1 ) return true;
	}
	if( u.x==v.x )
	{
		if( aa[3]==1 && bb[1]==1 ) return true;
		if( bb[3]==1 && aa[1]==1 ) return true;
	}
	
	return false; 
}

int getcha(int x1,int y1,int x2,int y2)
{
	int sta1=0,sta2=0;
	if( x1==0&&y1==1 || x1==1&&y1==0 ) sta1 = 1;
	if( x1==1&&y1==2 || x1==2&&y1==1 ) sta1 = 2;
	if( x1==2&&y1==3 || x1==3&&y1==2 ) sta1 = 3;
	if( x1==3&&y1==0 || x1==0&&y1==3 ) sta1 = 4;
	if( x1==0&&y1==2  ) sta1 = 5;
	if( x1==2&&y1==0  ) sta1 = 5;
	if( x1==1&&y1==3  ) sta1 = 6;
	if( x1==3&&y1==1  ) sta1 = 6;
	
	if( x2==0&&y2==1 || x2==1&&y2==0 ) sta2 = 1;
	if( x2==1&&y2==2 || x2==2&&y2==1 ) sta2 = 2;
	if( x2==2&&y2==3 || x2==3&&y2==2 ) sta2 = 3;
	if( x2==3&&y2==0 || x2==0&&y2==3 ) sta2 = 4;
	if( x2==0&&y2==2  ) sta2 = 5;
	if( x2==2&&y2==0  ) sta2 = 5;
	if( x2==1&&y2==3  ) sta2 = 6;
	if( x2==3&&y2==1  ) sta2 = 6;
	
	if( sta1>=5 )
	{
		if( sta1==sta2 ) return 0;
		else return 1;
	}
	
	if( sta2>=sta1 )
	{
		return ( sta2-sta1 );
	}
	else if( sta2<sta1 )
	{
		return ( sta2 + 4 - sta1 );
	}
}

void dfs(int p,int sum)
{
	int tag[2];
	tag[1] = last[p].tag[1];
	tag[2] = last[p].tag[2];
	int cha = getcha(first[last[ p ].x][last[ p ].y].tag[1] , first[last[ p ].x][last[ p ].y].tag[2],tag[1],tag[2]);
	if( cha != 0 ) sum++;
//		cout<<p<<"  "<<last[ p ].x<<"  "<<last[ p ].y<<"  "<<" ²îÒì "<<first[last[ p ].x][last[ p ].y].tag[1]<<" "<<first[last[ p ].x][last[ p ].y].tag[2]<<"   "<<last[p].tag[1]<<" "<<last[p].tag[2]<<endl;
	if( last[ p ].x==1&&last[ p ].y==1 )
	{
		printf("%d\n",sum);
		if( cha != 0 )
		{
			printf("1 %d 1 1\n",cha*90);
		}
		printf("0 1 1\n");
		return ;
	}
	dfs( last[p].lnum , sum+1 );
	if( cha != 0 ) 
	{
		printf("1 %d %d %d\n", cha*90 , last[p].x , last[p].y);
	}
	if( last[p].x==n+1 ) return ;
	printf("0 %d %d\n", last[p].x , last[p].y );
}

void print(int s)
{
	printf("YES\n");
	dfs( s , 0 );
	return ;
}

void work()
{
	tot = 0;
	queue< node > q;
	u.lx = u.ly = -1;
	u.lnum = -1;
	u.x = 0;
	u.y = 1;
	u.tag[1] = 2;
	u.tag[2] = 0;
	q.push(u);
	while( !q.empty() )
	{
		u = q.front();
		tot++;
		last[tot].lnum = u.lnum;
		last[tot].x = u.x;
		last[tot].y = u.y;
		u.num = tot;
		last[tot].tag[1] = u.tag[1];
		last[tot].tag[2] = u.tag[2];
		q.pop();
		for(int i=1;i<=2;i++)
		{
			v = u;
			v.lnum = u.num;
			v.lx = u.x;
			v.ly = u.y;
			v.x = u.x + dx[ u.tag[ i ] ];
			v.y = u.y + dy[ u.tag[ i ] ];
			if( v.x==u.x && v.y==u.y ) continue;
			if( !(v.x==n+1&&v.y==m) )
				if( v.x>n || v.x<1 || v.y<1 | v.y>m ) continue;
			v.ltag[1] = u.tag[1];
			v.ltag[2] = u.tag[2];
			for(int j=0;j<=3;j++)
			{
				if( (a[v.x][v.y]==4 || a[v.x][v.y]==5 ) && j>=2  ) break;
				if( v.x==0 && v.y==m && j==1 ) break;
				if( v.x==n+1 && v.y==m && j==1 ) break;
				v.tag[1] = ( first[v.x][v.y].tag[1] + j )%4;
				v.tag[2] = ( first[v.x][v.y].tag[2] + j )%4;
				if( v.x==u.lx && v.y==u.ly ) continue;//buqueding
				if( pd[ v.x ][ v.y ][ v.tag[1] ][ v.tag[2] ] == true ) continue;
				
				if( judge(  ) == true )
				{	
					pd[ v.x ][ v.y ][ v.tag[1] ][ v.tag[2] ] = true;
					if( v.x==n+1 && v.y==m ) 
					{
						tot++;
						last[tot].lnum = v.lnum;
						last[tot].x = v.x;
						last[tot].y = v.y;//????pre 
						v.num = tot;
						last[tot].tag[1] = v.tag[1];
						last[tot].tag[2] = v.tag[2];
						print(v.num);
						return ;
					}
					q.push( v );
				}
			}
		}
	}
	
	printf("NO\n");
	return ;
}

int main()
{ 
	
    
	cin>>t;
	while( t-- )
	{
		memset( pd,false,sizeof(pd) );
		scanf("%d %d",&n,&m);
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				scanf("%d",&a[i][j]);
				first[i][j].tag[1] = g[ a[i][j] ][0];
				first[i][j].tag[2] = g[ a[i][j] ][1];
			}
		}
		first[0][1].tag[1] = 2;
		first[0][1].tag[2] = 0;
		first[n+1][m].tag[1] = 2;
		first[n+1][m].tag[2] = 0;
		work();
	}
	return 0;
}

一些小细节:
1)(0,1)(n+1,m)两个格子是不可以旋转的,搜的时候注意特判
2)判断两个格子能否联通的时候,注意分开上下和左右两种情况判断
3)判断旋转了多少角度时候,要分开判断每一种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值