2019 ICPC Asia Xuzhou Regional
A. Cat
异或和重要性质:每个偶数和相邻的大于它的奇数的异或结果恒为1。
所以每四个以偶数开头的连续的数异或结果为0。
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a[111]; int main() { int t; scanf("%d", &t); while(t--) { ll l, r, s, ans = 0, tmp = 0; scanf("%lld %lld %lld", &l, &r, &s); if(r - l + 1 >= 4) { ll lx; for(ll i = l; i <= r; ++i) { if(i % 4 == 0) { lx = i; break; } } ll rx = (r + 1 - lx) / 4 * 4 + lx; //反例:比如4,5,6,7,8,9,10,11 ll cnt = 0; for(ll i = l; i < lx; ++i) a[++cnt] = i; for(ll i = rx; i <= r; ++i) a[++cnt] = i; for(ll i = 1; i <= cnt; ++i) { tmp = 0; for(ll j = i; j <= cnt; ++j) //注意异或不具有单调性,所以tmp > s时不能退出,以后可能还会 < s { tmp ^= a[j]; if(tmp <= s) ans = max(ans, j - i + 1); } } ans += (rx - lx); } else { for(ll i = l; i <= r; ++i) { tmp = 0; for(ll j = i; j <= r; ++j) { tmp ^= j; if(tmp <= s) ans = max(ans, j - i + 1); } } } if(ans == 0) printf("-1\n"); else printf("%lld\n", ans); } }
C. <3 numbers
小区间暴力,大区间直接Yes。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6 + 5; bool is_prime(ll n) { if(n == 1) return true; for(ll i = 2; i <= sqrt(n); ++i) if(n % i == 0) return false; return true; } int main() { int t; cin >> t; while(t--) { int cnt = 0; int l, r; scanf("%d %d", &l, &r); if(r - l + 1 > 1000) { printf("Yes\n"); continue; } for(int i = l; i <= r; ++i) { if(is_prime(i)) ++cnt; } if(3 * cnt < (r - l + 1)) printf("Yes\n"); else printf("No\n"); } }
F. The Answer to the Ultimate Question of Life, The Universe, and Everything.
暴力打表。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 222; ll a[maxn][3] = {{-5000, 0, 5000}, {-5000, 1, 5000}, {-4373, -486, 4375}, {-5, 4, 4}, {-5001, 0, 0}, {-5001, 0, 0}, {-637, -205, 644}, {-169, 44, 168}, {-5000, 2, 5000}, {-216, -52, 217}, {-650, -353, 683}, {-695, -641, 843}, {-11, 7, 10}, {-5001, 0, 0}, {-5001, 0, 0}, {-265, -262, 332}, {-4114, -588, 4118}, {-3331, 2195, 2977}, {-1373, -1276, 1671}, {-95, 47, 91}, {-2816, -741, 2833}, {-401, -287, 445}, {-5001, 0, 0}, {-5001, 0, 0}, {-10, 8, 8}, {-2683, 1839, 2357}, {-2107, 237, 2106}, {-5000, 3, 5000}, {-2268, -249, 2269}, {-233, -69, 235}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-1555, -244, 1557}, {-1120, -509, 1154}, {-3223, 2358, 2731}, {-444, -84, 445}, {-27, 16, 25}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-823, -307, 837}, {-7, -5, 8}, {-2369, 1709, 2025}, {-758, -473, 815}, {-141, 49, 139}, {-3950, -1247, 3991}, {-5001, 0, 0}, {-5001, 0, 0}, {-796, 602, 659}, {-5001, 0, 0}, {-2370, 1518, 2141}, {-3885, -648, 3891}, {-3329, 1837, 3131}, {-672, 505, 559}, {-998, 361, 982}, {-5001, 0, 0}, {-5001, 0, 0}, {-1201, -163, 1202}, {-966, 668, 845}, {-2744, -1561, 2903}, {-161, 102, 146}, {-5000, 4, 5000}, {-929, 403, 903}, {1, 1, 4}, {-5001, 0, 0}, {-5001, 0, 0},{-403, 134, 398}, {-2359, 824, 2325}, {-533, 401, 443}, {-432, -104, 434}, {-335, -146, 344}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-2080, -829, 2123}, {-706, -196, 711}, {-1300, -706, 1366}, {-2368, -1719, 2638}, {-1317, 847, 1188}, {-3707, 1315, 3651}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-4126, -1972, 4271}, {-1390, -1282, 1686}, {-2514, 1953, 2036}, {-1803, 365, 1798}, {-3389, -2912, 3992}, {-4052, 861, 4039}, {-248, -98, 253}, {-5001, 0, 0}, {-5001, 0, 0}, {-22, 14, 20}, {-3168, -991, 3200}, {-2101, -1638, 2391}, {-893, -622, 984}, {-1797, -903, 1870}, {-2327, 319, 2325}, {-239, 118, 229}, {-5001, 0, 0}, {-5001, 0, 0}, {-7, -4, 8}, {-2689, -1165, 2760}, {-1309, 947, 1117}, {-1165, -948, 1345}, {-2948, 853, 2924}, {-5001, 0, 0}, {-4793, -2312, 4966}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-12, 8, 11}, {-1906, -757, 1945}, {-896, -555, 962}, {-4328, 383, 4327}, {-3677, -1673, 3789}, {-2804, 1219, 2725}, {-5001, 0, 0}, {-5001, 0, 0}, {-37, -16, 38}, {-1, 0, 5}, {-5000, 5, 5000}, {-2212, -419, 2217}, {-4034, -3881, 4988}, {-3989, -726, 3997}, {-1580, -1238, 1801}, {-5001, 0, 0}, {-5001, 0, 0}, {-1, 2, 5}, {-399, 167, 389}, {-3013, -1766, 3203}, {-1351, -629, 1395}, {-1116, 816, 946}, {-758, -428, 801}, {-86, -77, 103}, {-5001, 0, 0}, {-5001, 0, 0}, {-139, 104, 116}, {-7, -3, 8}, {-5001, 0, 0}, {-2746, -2552, 3342}, {-8, -7, 10}, {-327, -263, 376}, {-2366, 1528, 2131}, {-5001, 0, 0}, {-5001, 0, 0}, {-367, 260, 317}, {-463, 215, 447}, {-805, 486, 741}, {-3736, -695, 3744}, {-2135, -516, 2145}, {-3693, -1049, 3721}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-1534, 383, 1526}, {-3874, -1654, 3972}, {-4767, -2476, 4980}, {-4125, -1417, 4180}, {-3423, -2943, 4033}, {-66, -59, 79}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-802, -574, 890}, {-1354, -1012, 1521}, {-3834, -2149, 4047}, {-1328, 891, 1178}, {-5001, 0, 0}, {-5001, 0, 0}, {-335, -170, 349}, {-5001, 0, 0}, {-5001, 0, 0}, {-1168, -160, 1169}, {-13, -10, 15}, {-2839, 1503, 2691}, {-5001, 0, 0}, {-4874, 974, 4861}, {-90, -29, 91}, {-4889, 976, 4876}, {-5001, 0, 0}, {-5001, 0, 0}, {-4, 5, 5}, {-1885, -1092, 2000}, {-1639, 318, 1635}, {-1702, -1403, 1974}, {-4812, -593, 4815}, {-377, -215, 399}, {-20, 16, 16}, {-5001, 0, 0}, {-5001, 0, 0}, {-5001, 0, 0}, {-1057, -579, 1112}, {-2867, -1606, 3026}, {-3752, -1347, 3809}, {-2208, 508, 2199}, {-2318, -638, 2334}}; int main() { int t; cin >> t; while(t--) { int x; scanf("%d", &x); if(a[x][0] == -5001) printf("impossible\n"); else printf("%d %d %d\n", a[x][0], a[x][1], a[x][2]); } }