Skip to content

Commit 8faf1e4

Browse files
Add files via upload
1 parent 75aeb15 commit 8faf1e4

File tree

5 files changed

+300
-0
lines changed

5 files changed

+300
-0
lines changed

Other_Tasks/CF2029_A_Set.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
t = int(input())
2+
for _ in range(t):
3+
l, r, k = map(int, input().split())
4+
q = r//k
5+
print(max(0, q-l+1))
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
t = int(input())
2+
3+
for _ in range(t):
4+
n = int(input())
5+
s = [int(x) for x in str(input())]
6+
7+
ones = s.count(1)
8+
zeros = s.count(0)
9+
10+
r = [int(x) for x in str(input())]
11+
12+
if ones == 0 or zeros == 0:
13+
print("NO")
14+
continue
15+
16+
for i in range(len(r)):
17+
if ones == 0 or zeros == 0:
18+
print("NO")
19+
break
20+
21+
if r[i] == 0:
22+
ones -= 1
23+
else:
24+
zeros -= 1
25+
26+
else:
27+
print("YES")
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#pragma GCC optimize("Ofast")
2+
#pragma GCC optimize("unroll-loops")
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
typedef long long ll;
7+
typedef vector<int> vi;
8+
#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
9+
10+
11+
int main(){
12+
int t;
13+
cin >> t;
14+
while (t--){
15+
int n;
16+
cin >> n;
17+
vector<int> arr(n);
18+
for (int i = 0; i < n; i++){
19+
cin >> arr[i];
20+
}
21+
22+
vector<int> oriRate(n); // original rating after looking through arr[0].. arr[i]
23+
24+
int x = 0;
25+
for (int i = 0; i < n; i++){
26+
if (arr[i] > x) x++;
27+
else if (arr[i] < x) x--;
28+
oriRate[i] = x;
29+
}
30+
31+
vector <int> brr(n); // max rating post arr[0]..arr[i] assuming at least 1 skip
32+
int cur = 0;
33+
for (int i=0; i<n; i++){
34+
brr[i] = cur;
35+
cur = max(cur, (oriRate[i]));
36+
}
37+
38+
vector<int> crr = brr;
39+
for (int i=0; i<n-1; i++){
40+
int nx = crr[i];
41+
if (arr[i+1] > nx) nx++;
42+
else if (arr[i+1] < nx) nx--;
43+
crr[i+1] = max(crr[i+1], nx);
44+
}
45+
46+
cout << crr[n-1] << endl;
47+
48+
}
49+
50+
return 0;
51+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#pragma GCC optimize("Ofast")
2+
#pragma GCC optimize("unroll-loops")
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
typedef long long ll;
7+
typedef vector<int> vi;
8+
#define fast_cin() \
9+
ios_base::sync_with_stdio(false); \
10+
cin.tie(NULL); \
11+
cout.tie(NULL);
12+
13+
int n, e;
14+
vector<unordered_set<int>> adjlist;
15+
int main() {
16+
int tc;
17+
cin >> tc;
18+
while (tc--) {
19+
cin >> n >> e;
20+
adjlist.assign(n, unordered_set<int>());
21+
22+
vector<tuple<int, int, int>> ans;
23+
for (int i = 0; i < e; i++) {
24+
int u, v;
25+
cin >> u >> v;
26+
u--;
27+
v--;
28+
adjlist[u].insert(v);
29+
adjlist[v].insert(u);
30+
}
31+
32+
queue<int> q; // nodes that have > degree 1
33+
for (int i = 0; i < n; i++) {
34+
if (adjlist[i].size() > 1) {
35+
q.push(i);
36+
}
37+
}
38+
39+
while (!q.empty()) {
40+
int u = q.front();
41+
q.pop();
42+
while (adjlist[u].size() > 1) {
43+
int v1 = *adjlist[u].begin();
44+
int v2 = *(++adjlist[u].begin());
45+
assert(v1 != v2);
46+
47+
ans.emplace_back(u, v1, v2);
48+
adjlist[v2].erase(u);
49+
adjlist[v1].erase(u);
50+
adjlist[u].erase(v1);
51+
adjlist[u].erase(v2);
52+
if (adjlist[v1].find(v2) == adjlist[v1].end()) {
53+
// delete each other too
54+
adjlist[v1].insert(v2);
55+
adjlist[v2].insert(v1);
56+
} else {
57+
adjlist[v1].erase(v2);
58+
adjlist[v2].erase(v1);
59+
}
60+
}
61+
}
62+
63+
vector<pair<int, int>> pairs;
64+
vector<int> singles;
65+
66+
for (int i = 0; i < n; i++) {
67+
if (adjlist[i].size() == 0) {
68+
singles.push_back(i);
69+
} else if (adjlist[i].size() == 1) {
70+
if (i < *adjlist[i].begin()) pairs.emplace_back(i, *adjlist[i].begin());
71+
} else {
72+
assert(false);
73+
}
74+
}
75+
76+
if (pairs.size() == 0) { // empty
77+
assert(ans.size() <= 2 * max(n, e));
78+
79+
cout << ans.size() << endl;
80+
for (auto [u, v1, v2] : ans) {
81+
cout << u + 1 << " " << v1 + 1 << " " << v2 + 1 << endl;
82+
}
83+
continue;
84+
}
85+
86+
// make a tree
87+
int root = pairs[0].first;
88+
for (int i = 1; i < pairs.size(); i++) {
89+
ans.emplace_back(root, pairs[i].first, pairs[i].second);
90+
}
91+
92+
int curl = pairs[0].first;
93+
int curr = pairs[0].second;
94+
95+
for (auto s : singles) {
96+
ans.emplace_back(curl, curr, s);
97+
curr = curl;
98+
curl = s;
99+
}
100+
101+
cout << ans.size() << endl;
102+
assert(ans.size() <= 2 * max(n, e));
103+
for (auto [u, v1, v2] : ans) {
104+
cout << u + 1 << " " << v1 + 1 << " " << v2 + 1 << endl;
105+
}
106+
}
107+
108+
return 0;
109+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#pragma GCC optimize("Ofast")
2+
#pragma GCC optimize("unroll-loops")
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
6+
typedef long long ll;
7+
typedef vector<int> vi;
8+
#define fast_cin() \
9+
ios_base::sync_with_stdio(false); \
10+
cin.tie(NULL); \
11+
cout.tie(NULL);
12+
13+
typedef long long ll;
14+
typedef vector<ll> vll;
15+
16+
constexpr ll inf = 1e18;
17+
int _sieve_size;
18+
vector<ll> lowestpf, primes;
19+
void smallestPF(ll upperbound = (ll)4e5 + 2) {
20+
_sieve_size = upperbound + 1;
21+
lowestpf.assign(_sieve_size, inf);
22+
23+
for (ll i = 2; i < _sieve_size; i++) {
24+
if (lowestpf[i] == inf) {
25+
lowestpf[i] = i;
26+
for (ll j = i * i; j < _sieve_size; j += i) {
27+
lowestpf[j] = min(lowestpf[j], i);
28+
}
29+
primes.push_back(i);
30+
}
31+
}
32+
} // Time: O(n log log n)
33+
34+
vector<tuple<ll, ll>> prime_factorise_sieve(ll n) {
35+
assert(n < _sieve_size && n >= 1);
36+
vector<tuple<ll, ll>> prime_factors;
37+
while (n != 1) {
38+
ll p = lowestpf[n];
39+
ll e = 0;
40+
while (lowestpf[n] == p) {
41+
n /= p;
42+
e++;
43+
}
44+
prime_factors.push_back({p, e});
45+
}
46+
return prime_factors;
47+
} // Time: O(log n)
48+
49+
constexpr int top = 4e5;
50+
51+
int main() {
52+
fast_cin();
53+
smallestPF();
54+
55+
int t;
56+
cin >> t;
57+
while (t--) {
58+
int n;
59+
cin >> n;
60+
vll arr(n);
61+
for (int i = 0; i < n; i++) {
62+
cin >> arr[i];
63+
}
64+
65+
// check if any element is a prime
66+
int numPrimes = 0;
67+
int thePrime = -1;
68+
for (int i = 0; i < n; i++) {
69+
if (lowestpf[arr[i]] == arr[i]) {
70+
numPrimes++;
71+
thePrime = arr[i];
72+
}
73+
}
74+
75+
if (numPrimes == 0) {
76+
cout << 2 << endl;
77+
continue;
78+
}
79+
if (numPrimes == 1 && thePrime == 2) {
80+
cout << 2 << endl;
81+
continue;
82+
}
83+
if (numPrimes > 1) {
84+
cout << -1 << endl; // impossible
85+
continue;
86+
}
87+
88+
bool canDo = true;
89+
for (int i = 0; i < n; i++) {
90+
if (arr[i] == thePrime) {
91+
continue;
92+
}
93+
int pf = lowestpf[arr[i]];
94+
if (thePrime * pf > arr[i] && (thePrime * 2 > arr[i] - pf)) {
95+
canDo = false;
96+
break;
97+
}
98+
}
99+
100+
if (canDo) {
101+
cout << thePrime << endl;
102+
} else {
103+
cout << -1 << endl;
104+
}
105+
}
106+
107+
return 0;
108+
}

0 commit comments

Comments
 (0)