Skip to content

Commit 2105eea

Browse files
Add files via upload
1 parent 8947534 commit 2105eea

File tree

5 files changed

+176
-0
lines changed

5 files changed

+176
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
t = int(input())
2+
for _ in range(t):
3+
n = int(input())
4+
arr = list(map(int, input().split()))
5+
6+
if n > 2 or arr[0] + 1 == arr[1]:
7+
print("NO")
8+
9+
else:
10+
print("YES")
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
for _ in range(int(input())):
2+
3+
al, ar = map(int, input().split())
4+
bl, br = map(int, input().split())
5+
6+
if al > bl:
7+
al, ar, bl, br = bl, br, al, ar
8+
9+
if ar < bl:
10+
print(1)
11+
continue
12+
13+
if ar > br:
14+
ans = 0
15+
if al < bl: ans += 1
16+
print (ans + 1 + br - bl)
17+
continue
18+
19+
ans = 0
20+
if al < bl: ans += 1
21+
if ar < br: ans += 1
22+
ans += ar - bl
23+
24+
print(ans)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
t = int(input())
2+
for _ in range(t):
3+
n, k = map(int, input().split())
4+
5+
arr = list(map(int, input().split()))
6+
arr.sort(reverse=True)
7+
8+
rk = k
9+
for i in range(0, n-1, 2):
10+
maxUp = arr[i] - arr[i+1]
11+
update = min(maxUp, rk)
12+
rk -= update
13+
arr[i+1] += update
14+
if rk == 0:
15+
break
16+
17+
ans = 0
18+
for i in range(0, n):
19+
ans += (-1 if i % 2 == 1 else 1) * arr[i]
20+
21+
print(ans)
22+
23+
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
for _ in range(int(input())):
2+
n, q = map(int, input().split())
3+
inf = int(1e18)
4+
latest = {}
5+
latest["BG"] = -inf
6+
latest["BR"] = -inf
7+
latest["BY"] = -inf
8+
latest["GR"] = -inf
9+
latest["GY"] = -inf
10+
latest["RY"] = -inf
11+
12+
arr = list(input().split())
13+
sameLeft = [-inf for i in range(n)]
14+
sameRight = [inf for i in range(n)]
15+
16+
for i in range(n):
17+
for k in latest:
18+
if len(set(k + arr[i])) == 3:
19+
sameLeft[i] = max(sameLeft[i], latest[k])
20+
latest[arr[i]] = i
21+
22+
23+
latest["BG"] = inf
24+
latest["BR"] = inf
25+
latest["BY"] = inf
26+
latest["GR"] = inf
27+
latest["GY"] = inf
28+
latest["RY"] = inf
29+
30+
for i in range(n-1, -1, -1):
31+
for k in latest:
32+
if len(set(k + arr[i])) == 3:
33+
sameRight[i] = min(sameRight[i], latest[k])
34+
latest[arr[i]] = i
35+
36+
for _ in range(q):
37+
l, r = map(int, input().split())
38+
if l > r: l, r = r, l
39+
l -= 1
40+
r -= 1
41+
42+
if len(set(arr[l] + arr[r])) <= 3:
43+
print(r - l)
44+
continue
45+
46+
if sameRight[l] <= r:
47+
print(r - l)
48+
continue
49+
50+
extra = min(l - sameLeft[l], sameRight[l] - r)
51+
if extra >= int(1e7):
52+
print(-1)
53+
continue
54+
print(r - l + extra*2)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#pragma GCC optimize("Ofast")
2+
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
3+
#pragma GCC optimize("unroll-loops")
4+
#include <bits/stdc++.h>
5+
using namespace std;
6+
7+
#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
8+
9+
typedef long long ll;
10+
typedef vector<ll> vll;
11+
12+
constexpr ll inf = 1e18;
13+
vector<ll> lowestpf, primes;
14+
void smallestPF(ll upperbound = (ll) 1e7+2){
15+
_sieve_size = upperbound + 1;
16+
lowestpf.assign(_sieve_size, inf);
17+
18+
for(ll i = 2; i < _sieve_size; i++){
19+
if(lowestpf[i] == inf){
20+
lowestpf[i] = i;
21+
for(ll j = i * i; j < _sieve_size; j += i){
22+
lowestpf[j] = min(lowestpf[j], i);
23+
}
24+
primes.push_back(i);
25+
}
26+
}
27+
} // Time: O(n log log n)
28+
29+
unordered_map<ll, ll> primeOrder;
30+
31+
int g(int x){
32+
if (x == 0) return 0;
33+
if (x == 1) return 1;
34+
int pf = lowestpf[x];
35+
if (pf == 2) return 0;
36+
return primeOrder[pf];
37+
}
38+
39+
int main(){
40+
fast_cin();
41+
smallestPF();
42+
for (int i = 0; i < primes.size(); i++){
43+
primeOrder[primes[i]] = i+1;
44+
}
45+
46+
int t;
47+
cin >> t;
48+
while (t--){
49+
int n;
50+
cin >> n;
51+
int ans = 0;
52+
for (int i = 0; i < n; i++){
53+
int x;
54+
cin >> x;
55+
ans ^= g(x);
56+
}
57+
58+
if (ans == 0){
59+
cout << "Bob\n";
60+
} else {
61+
cout << "Alice\n";
62+
}
63+
}
64+
return 0;
65+
}

0 commit comments

Comments
 (0)