#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool canCoverAllHouses(const vector<int>& houses, int N, int K, int P) {
int count = 0;
int i = 0;
while (i < N && count < K) {
int location = houses[i] + P;
count++;
while (i < N && houses[i] <= location + P) {
i++;
}
}
return i == N;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, K;
cin >> N >> K;
vector<int> houses(N);
for (int i = 0; i < N; ++i) {
cin >> houses[i];
}
sort(houses.begin(), houses.end());
int left = 0;
int right = houses[N-1] - houses[0];
int result = right;
while (left <= right) {
int mid = left + (right - left) / 2;
if (canCoverAllHouses(houses, N, K, mid)) {
result = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << result << '\n';
return 0;
}
#include <vector>
#include <algorithm>
using namespace std;
bool canCoverAllHouses(const vector<int>& houses, int N, int K, int P) {
int count = 0;
int i = 0;
while (i < N && count < K) {
int location = houses[i] + P;
count++;
while (i < N && houses[i] <= location + P) {
i++;
}
}
return i == N;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, K;
cin >> N >> K;
vector<int> houses(N);
for (int i = 0; i < N; ++i) {
cin >> houses[i];
}
sort(houses.begin(), houses.end());
int left = 0;
int right = houses[N-1] - houses[0];
int result = right;
while (left <= right) {
int mid = left + (right - left) / 2;
if (canCoverAllHouses(houses, N, K, mid)) {
result = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << result << '\n';
return 0;
}
๐1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> solve(ll n,ll m,vector<ll>&txt,vector<ll>& pat)
{
vector<ll>mask(UCHAR_MAX+1,~0);
for (ll i=0;i<m;i++)
{
mask[pat[i]]&=~(1U<<i);
}
vector<ll>result;
ll R=~1;
vector<ll>Rm(2,~1);
for (ll i=0;i<n;i++)
{
ll old=R;
R|=mask[txt[i]];
R<<=1;
ll tmp=Rm[1];
Rm[1]=(old&(Rm[1]|mask[txt[i]]))<<1;
old=tmp;
if((Rm[1]&(1U<<m))==0)
{
result.push_back(i-m+2);
}
}
return result;
}
signed main()
{
ll n,m; cin>>n>>m;
vector<ll>txt(n),pat(m);
for(ll i=0;i<n;i++) cin>>txt[i];
for(ll i=0;i<m;i++) cin>>pat[i];
auto ans=solve(n,m,txt,pat);
cout<<ans.size()<<endl;
for(auto it:ans) cout<<it<<" ";
return 0;
}
Phonepe โ
Find my file
#include <iostream>
#include <vector>
#include <unordered_set>
#include <string>
using namespace std;
bool containsDislikedDigits(int number, const unordered_set<int>& dislikedDigits) {
while (number > 0) {
if (dislikedDigits.find(number % 10) != dislikedDigits.end()) {
return true;
}
number /= 10;
}
return false;
}
int solve(int N, int k, vector<int>& d) {
unordered_set<int> dislikedDigits(d.begin(), d.end());
while (containsDislikedDigits(N, dislikedDigits)) {
++N;
}
return N;
}
int main() {
int N, k;
cin >> N >> k;
vector<int> d(k);
for (int i = 0; i < k; ++i) {
cin >> d[i];
}
int result = solve(N, k, d);
cout << result << endl;
return 0;
}
//minimum amount
Increffโ
#include <vector>
#include <unordered_set>
#include <string>
using namespace std;
bool containsDislikedDigits(int number, const unordered_set<int>& dislikedDigits) {
while (number > 0) {
if (dislikedDigits.find(number % 10) != dislikedDigits.end()) {
return true;
}
number /= 10;
}
return false;
}
int solve(int N, int k, vector<int>& d) {
unordered_set<int> dislikedDigits(d.begin(), d.end());
while (containsDislikedDigits(N, dislikedDigits)) {
++N;
}
return N;
}
int main() {
int N, k;
cin >> N >> k;
vector<int> d(k);
for (int i = 0; i < k; ++i) {
cin >> d[i];
}
int result = solve(N, k, d);
cout << result << endl;
return 0;
}
//minimum amount
Increffโ
Smallest number
Increff โ
Increff โ
def maxShared(friends_nodes, friends_from, friends_to, friends_weight):
interests = {}
for i in range(len(friends_from)):
pair = tuple(sorted([friends_from[i], friends_to[i]]))
if pair not in interests:
interests[pair] = set()
interests[pair].add(friends_weight[i])
max_shared = max(len(interests[pair]) for pair in interests)
max_pairs = [pair for pair in interests if len(interests[pair]) == max_shared]
max_product = max(pair[0] * pair[1] for pair in max_pairs)
return max_product
def canAchieve(min_attention, attention, m, k):
n = len(attention)
diff = [0] * (n + 1)
current_add = 0
workshops_used = 0
for i in range(n):
current_add += diff[i]
if attention[i] + current_add < min_attention:
increment = min_attention - (attention[i] + current_add)
workshops_used += increment
if workshops_used > m:
return False
if i + k < n:
diff[i + k] -= increment
current_add += increment
return workshops_used <= m
def maximizeMinAttention(attention, m, k):
left = min(attention)
right = max(attention) + m
while left < right:
mid = (left + right + 1) // 2
if canAchieve(mid, attention, m, k):
left = mid
else:
right = mid - 1
return left
n = len(attention)
diff = [0] * (n + 1)
current_add = 0
workshops_used = 0
for i in range(n):
current_add += diff[i]
if attention[i] + current_add < min_attention:
increment = min_attention - (attention[i] + current_add)
workshops_used += increment
if workshops_used > m:
return False
if i + k < n:
diff[i + k] -= increment
current_add += increment
return workshops_used <= m
def maximizeMinAttention(attention, m, k):
left = min(attention)
right = max(attention) + m
while left < right:
mid = (left + right + 1) // 2
if canAchieve(mid, attention, m, k):
left = mid
else:
right = mid - 1
return left
โค1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <sstream>
#include <algorithm>
#include <stdexcept>
using namespace std;
struct U {
int i;
bool a;
};
struct C {
unordered_map<int, U> u;
unordered_map<int, int> m;
void p(vector<vector<string>>& e) {
for (const auto& ev : e) {
string a = ev[0];
int t = 0;
try {
t = stoi(ev[1]);
} catch (const invalid_argument& ex) {
cerr << "Invalid timestamp: " << ev[1] << endl;
continue;
}
if (a == "MESSAGE") {
string ml = ev[2];
istringstream iss(ml);
string tk;
while (iss >> tk) {
if (tk == "ALL") {
for (auto& us : u) {
m[us.first]++;
}
} else if (tk == "HERE") {
for (auto& us : u) {
if (us.second.a) {
m[us.first]++;
}
}
} else if (tk.size() >= 3) {
try {
int id = stoi(tk.substr(2));
m[id]++;
} catch (const invalid_argument& ex) {
cerr << "Invalid user ID: " << tk.substr(2) << endl;
}
}
}
} else if (a == "OFFLINE" && ev.size() >= 3) {
string idStr = ev[2].substr(2);
if (!idStr.empty()) {
try {
int id = stoi(idStr);
if (u.find(id) != u.end()) {
u[id].a = false;
m[id]--;
m[-1]--;
if (u[id].a) {
m[-2]--;
}
}
} catch (const invalid_argument& ex) {
cerr << "Invalid user ID: " << idStr << endl;
}
}
}
}
}
vector<string> g() {
vector<string> r;
for (const auto& me : m) {
if (me.first >= 0) {
r.push_back("id" + to_string(me.first) + " - " + to_string(me.second));
}
}
sort(r.begin(), r.end());
return r;
}
};
int main() {
vector<vector<string>> e = {
{"MESSAGE", "0", "ALL id158 id42"},
{"OFFLINE", "1", "id158"},
{"MESSAGE", "2", "id158 id158"},
{"OFFLINE", "3", "id23"},
{"MESSAGE", "60", "HERE id158 id42 id23"},
{"MESSAGE", "61", "HERE"}
};
C c;
c.p(e);
vector<string> r = c.g();
for (const string& s : r) {
cout << s << endl;
}
return 0;
}
#include <vector>
#include <unordered_map>
#include <string>
#include <sstream>
#include <algorithm>
#include <stdexcept>
using namespace std;
struct U {
int i;
bool a;
};
struct C {
unordered_map<int, U> u;
unordered_map<int, int> m;
void p(vector<vector<string>>& e) {
for (const auto& ev : e) {
string a = ev[0];
int t = 0;
try {
t = stoi(ev[1]);
} catch (const invalid_argument& ex) {
cerr << "Invalid timestamp: " << ev[1] << endl;
continue;
}
if (a == "MESSAGE") {
string ml = ev[2];
istringstream iss(ml);
string tk;
while (iss >> tk) {
if (tk == "ALL") {
for (auto& us : u) {
m[us.first]++;
}
} else if (tk == "HERE") {
for (auto& us : u) {
if (us.second.a) {
m[us.first]++;
}
}
} else if (tk.size() >= 3) {
try {
int id = stoi(tk.substr(2));
m[id]++;
} catch (const invalid_argument& ex) {
cerr << "Invalid user ID: " << tk.substr(2) << endl;
}
}
}
} else if (a == "OFFLINE" && ev.size() >= 3) {
string idStr = ev[2].substr(2);
if (!idStr.empty()) {
try {
int id = stoi(idStr);
if (u.find(id) != u.end()) {
u[id].a = false;
m[id]--;
m[-1]--;
if (u[id].a) {
m[-2]--;
}
}
} catch (const invalid_argument& ex) {
cerr << "Invalid user ID: " << idStr << endl;
}
}
}
}
}
vector<string> g() {
vector<string> r;
for (const auto& me : m) {
if (me.first >= 0) {
r.push_back("id" + to_string(me.first) + " - " + to_string(me.second));
}
}
sort(r.begin(), r.end());
return r;
}
};
int main() {
vector<vector<string>> e = {
{"MESSAGE", "0", "ALL id158 id42"},
{"OFFLINE", "1", "id158"},
{"MESSAGE", "2", "id158 id158"},
{"OFFLINE", "3", "id23"},
{"MESSAGE", "60", "HERE id158 id42 id23"},
{"MESSAGE", "61", "HERE"}
};
C c;
c.p(e);
vector<string> r = c.g();
for (const string& s : r) {
cout << s << endl;
}
return 0;
}
def min_cost_to_make_strongly_connected(N, tracks):
from collections import defaultdict, deque
import heapq
def kosaraju_scc(N, adj_list, rev_adj_list):
def dfs(node, adj_list, visited, stack):
visited[node] = True
for neighbor, _ in adj_list[node]:
if not visited[neighbor]:
dfs(neighbor, adj_list, visited, stack)
stack.append(node)
def reverse_dfs(node, rev_adj_list, visited, scc):
visited[node] = True
scc.append(node)
for neighbor in rev_adj_list[node]:
if not visited[neighbor]:
reverse_dfs(neighbor, rev_adj_list, visited, scc)
stack = []
visited = [False] * (N + 1)
for i in range(1, N + 1):
if not visited[i]:
dfs(i, adj_list, visited, stack)
visited = [False] * (N + 1)
sccs = []
while stack:
node = stack.pop()
if not visited[node]:
scc = []
reverse_dfs(node, rev_adj_list, visited, scc)
sccs.append(scc)
return sccs
adj_list = defaultdict(list)
rev_adj_list = defaultdict(list)
for A, B, C in tracks:
adj_list[A].append((B, C))
rev_adj_list[B].append(A)
sccs = kosaraju_scc(N, adj_list, rev_adj_list)
node_to_scc = {}
for i, scc in enumerate(sccs):
for node in scc:
node_to_scc[node] = i
component_graph = defaultdict(list)
component_cost = {}
for A, B, C in tracks:
compA = node_to_scc[A]
compB = node_to_scc[B]
if compA != compB:
if (compA, compB) not in component_cost or component_cost[(compA, compB)] > C:
component_cost[(compA, compB)] = C
pq = []
for (u, v), cost in component_cost.items():
heapq.heappush(pq, (cost, u, v))
parent = list(range(len(sccs)))
rank = [0] * len(sccs)
def find(u):
if parent[u] != u:
parent[u] = find(parent[u])
return parent[u]
def union(u, v):
root_u = find(u)
root_v = find(v)
if root_u != root_v:
if rank[root_u] > rank[root_v]:
parent[root_v] = root_u
elif rank[root_u] < rank[root_v]:
parent[root_u] = root_v
else:
parent[root_v] = root_u
rank[root_u] += 1
min_cost = 0
edges_used = 0
while pq and edges_used < len(sccs) - 1:
cost, u, v = heapq.heappop(pq)
if find(u) != find(v):
union(u, v)
min_cost += cost
edges_used += 1
return min_cost//2
Phonepe โ
from collections import defaultdict, deque
import heapq
def kosaraju_scc(N, adj_list, rev_adj_list):
def dfs(node, adj_list, visited, stack):
visited[node] = True
for neighbor, _ in adj_list[node]:
if not visited[neighbor]:
dfs(neighbor, adj_list, visited, stack)
stack.append(node)
def reverse_dfs(node, rev_adj_list, visited, scc):
visited[node] = True
scc.append(node)
for neighbor in rev_adj_list[node]:
if not visited[neighbor]:
reverse_dfs(neighbor, rev_adj_list, visited, scc)
stack = []
visited = [False] * (N + 1)
for i in range(1, N + 1):
if not visited[i]:
dfs(i, adj_list, visited, stack)
visited = [False] * (N + 1)
sccs = []
while stack:
node = stack.pop()
if not visited[node]:
scc = []
reverse_dfs(node, rev_adj_list, visited, scc)
sccs.append(scc)
return sccs
adj_list = defaultdict(list)
rev_adj_list = defaultdict(list)
for A, B, C in tracks:
adj_list[A].append((B, C))
rev_adj_list[B].append(A)
sccs = kosaraju_scc(N, adj_list, rev_adj_list)
node_to_scc = {}
for i, scc in enumerate(sccs):
for node in scc:
node_to_scc[node] = i
component_graph = defaultdict(list)
component_cost = {}
for A, B, C in tracks:
compA = node_to_scc[A]
compB = node_to_scc[B]
if compA != compB:
if (compA, compB) not in component_cost or component_cost[(compA, compB)] > C:
component_cost[(compA, compB)] = C
pq = []
for (u, v), cost in component_cost.items():
heapq.heappush(pq, (cost, u, v))
parent = list(range(len(sccs)))
rank = [0] * len(sccs)
def find(u):
if parent[u] != u:
parent[u] = find(parent[u])
return parent[u]
def union(u, v):
root_u = find(u)
root_v = find(v)
if root_u != root_v:
if rank[root_u] > rank[root_v]:
parent[root_v] = root_u
elif rank[root_u] < rank[root_v]:
parent[root_u] = root_v
else:
parent[root_v] = root_u
rank[root_u] += 1
min_cost = 0
edges_used = 0
while pq and edges_used < len(sccs) - 1:
cost, u, v = heapq.heappop(pq)
if find(u) != find(v):
union(u, v)
min_cost += cost
edges_used += 1
return min_cost//2
Phonepe โ
def reverse_substrings(word):
possible_strings = set()
for i in range(1, len(word) + 1):
reversed_prefix = word[:i][::-1] + word[i:]
possible_strings.add(reversed_prefix)
for i in range(1, len(word) + 1):
reversed_suffix = word[:-i] + word[-i:][::-1]
possible_strings.add(reversed_suffix)
return min(possible_strings)
possible_strings = set()
for i in range(1, len(word) + 1):
reversed_prefix = word[:i][::-1] + word[i:]
possible_strings.add(reversed_prefix)
for i in range(1, len(word) + 1):
reversed_suffix = word[:-i] + word[-i:][::-1]
possible_strings.add(reversed_suffix)
return min(possible_strings)
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll help(ll n,vector<vector<ll>>&v,vector<ll>&dp,ll i)
{
if(i>=n) return 0;
if(dp[i]!=-1) return dp[i];
ll t=help(n,v,dp,i+1);
ll l=i+1;
ll r=n-1;
ll res=n;
while(l<=r)
{
ll mid=(l+r)/2;
if(v[mid][0]>=v[i][1])
{
res=mid;
r=mid-1;
}
else l=mid+1;
}
ll next=res;
ll sum=v[i][2]+v[i][1]-v[i][0];
t=max(t,sum+help(n,v,dp,next));
return dp[i]=t;
}
ll solve(vector<ll>&pick,vector<ll>&drop,vector<ll>&tip)
{
ll n=pick.size();
vector<vector<ll>>rides(n);
for(ll i=0;i<n;i++)
{
rides[i]={pick[i],drop[i],tip[i]};
}
sort(rides.begin(),rides.end());
vector<ll>dp(n+10,-1);
return help(n,rides,dp,0);
}
signed main()
{
ll n; cin>>n;
vector<ll>pick(n),drop(n),tip(n);
for(ll i=0;i<n;i++) cin>>pick[i];
for(ll i=0;i<n;i++) cin>>drop[i];
for(ll i=0;i<n;i++) cin>>tip[i];
cout<<solve(pick,drop,tip);
return 0;
}
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
public static int[] teamSize(int[] talent, int talentsCount) {
int n = talent.length;
int[] result = new int[n];
Arrays.fill(result, -1);
Map<Integer, Integer> talentFreq = new HashMap<>();
int left = 0, uniqueTalents = 0;
for (int right = 0; right < n; right++) {
talentFreq.put(talent[right], talentFreq.getOrDefault(talent[right], 0) + 1);
if (talentFreq.get(talent[right]) == 1) {
uniqueTalents++;
}
while (uniqueTalents == talentsCount) {
result[left] = (result[left] == -1) ? right - left + 1 : Math.min(result[left], right - left + 1);
talentFreq.put(talent[left], talentFreq.get(talent[left]) - 1);
if (talentFreq.get(talent[left]) == 0) {
uniqueTalents--;
}
left++;
}
}
return result;
}
int n = talent.length;
int[] result = new int[n];
Arrays.fill(result, -1);
Map<Integer, Integer> talentFreq = new HashMap<>();
int left = 0, uniqueTalents = 0;
for (int right = 0; right < n; right++) {
talentFreq.put(talent[right], talentFreq.getOrDefault(talent[right], 0) + 1);
if (talentFreq.get(talent[right]) == 1) {
uniqueTalents++;
}
while (uniqueTalents == talentsCount) {
result[left] = (result[left] == -1) ? right - left + 1 : Math.min(result[left], right - left + 1);
talentFreq.put(talent[left], talentFreq.get(talent[left]) - 1);
if (talentFreq.get(talent[left]) == 0) {
uniqueTalents--;
}
left++;
}
}
return result;
}
int solve(int n, int m, int k, vector<vector<int>>& profit) {
vector<vector<int>> dp(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
dp[i][0] = profit[i][0];
}
for (int j = 1; j < m; j++) {
vector<int> temp(n, 0);
for (int i = 0; i < n; i++) {
for (int x = max(0, i - k); x <= min(n - 1, i + k); x++) {
if (x != i) {
temp[i] = max(temp[i], dp[x][j-1]);
}
}
}
for (int i = 0; i < n; i++) {
dp[i][j] = temp[i] + profit[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
ans = max(ans, dp[i][m-1]);
}
return ans;
}
//max-profit
vector<vector<int>> dp(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
dp[i][0] = profit[i][0];
}
for (int j = 1; j < m; j++) {
vector<int> temp(n, 0);
for (int i = 0; i < n; i++) {
for (int x = max(0, i - k); x <= min(n - 1, i + k); x++) {
if (x != i) {
temp[i] = max(temp[i], dp[x][j-1]);
}
}
}
for (int i = 0; i < n; i++) {
dp[i][j] = temp[i] + profit[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
ans = max(ans, dp[i][m-1]);
}
return ans;
}
//max-profit