๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int maxPartitions(vector<int>& nums) {
int n = nums.size();
unordered_map<long long, int> map, rmap;
long long total = 0;
for (int num : nums) {
total += num;
}
long long left = 0, right = total;
for (int i = 0; i < n - 1; ++i) {
right -= nums[i];
left += nums[i];
long long diff = right - left;
rmap[diff]++;
}
int result = rmap[0];
left = 0;
right = total;
for (int i = 0; i < n; ++i) {
result = max(result, map[nums[i]] + rmap[-nums[i]]);
right -= nums[i];
left += nums[i];
long long diff = right - left;
rmap[diff]--;
map[diff]++;
}
return result;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int result = maxPartitions(nums);
cout << result << endl;
}
return 0;
}
Number of Partition โ
Google
#include <vector>
#include <unordered_map>
using namespace std;
int maxPartitions(vector<int>& nums) {
int n = nums.size();
unordered_map<long long, int> map, rmap;
long long total = 0;
for (int num : nums) {
total += num;
}
long long left = 0, right = total;
for (int i = 0; i < n - 1; ++i) {
right -= nums[i];
left += nums[i];
long long diff = right - left;
rmap[diff]++;
}
int result = rmap[0];
left = 0;
right = total;
for (int i = 0; i < n; ++i) {
result = max(result, map[nums[i]] + rmap[-nums[i]]);
right -= nums[i];
left += nums[i];
long long diff = right - left;
rmap[diff]--;
map[diff]++;
}
return result;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int result = maxPartitions(nums);
cout << result << endl;
}
return 0;
}
Number of Partition โ
๐2
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void precompute(const string& S, vector<vector<bool>>& isPalindrome) {
int n = S.size();
for (int i = 0; i < n; ++i) {
isPalindrome[i][i] = true;
}
for (int len = 2; len <= n; ++len) {
for (int i = 0; i <= n - len; ++i) {
int j = i + len - 1;
if (S[i] == S[j]) {
if (len == 2) {
isPalindrome[i][j] = true;
} else {
isPalindrome[i][j] = isPalindrome[i + 1][j - 1];
}
}
}
}
}
int countGoodTriplets(const string& S) {
int n = S.size();
vector<vector<bool>> isPalindrome(n, vector<bool>(n, false));
precompute(S, isPalindrome);
vector<int> dpLeft(n, 0);
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
if (isPalindrome[j][i]) {
dpLeft[i]++;
}
}
if (i > 0) {
dpLeft[i] += dpLeft[i - 1];
}
}
vector<int> dpRight(n, 0);
for (int i = n - 1; i >= 0; --i) {
for (int j = i; j < n; ++j) {
if (isPalindrome[i][j]) {
dpRight[i]++;
}
}
if (i < n - 1) {
dpRight[i] += dpRight[i + 1];
}
}
int goodTriplets = 0;
for (int i = 1; i < n - 1; ++i) {
for (int j = i; j < n - 1; ++j) {
if (isPalindrome[i][j]) {
goodTriplets += dpLeft[i - 1] * dpRight[j + 1];
}
}
}
return goodTriplets;
}
int main() {
int t;
cint >> t;
while(t--){
string S;
cin >> S;
cout << countGoodTriplets(S) << endl;
}
return 0;
}
Palindromic triplet
Google โ
Source :Hola
#include <vector>
#include <string>
using namespace std;
void precompute(const string& S, vector<vector<bool>>& isPalindrome) {
int n = S.size();
for (int i = 0; i < n; ++i) {
isPalindrome[i][i] = true;
}
for (int len = 2; len <= n; ++len) {
for (int i = 0; i <= n - len; ++i) {
int j = i + len - 1;
if (S[i] == S[j]) {
if (len == 2) {
isPalindrome[i][j] = true;
} else {
isPalindrome[i][j] = isPalindrome[i + 1][j - 1];
}
}
}
}
}
int countGoodTriplets(const string& S) {
int n = S.size();
vector<vector<bool>> isPalindrome(n, vector<bool>(n, false));
precompute(S, isPalindrome);
vector<int> dpLeft(n, 0);
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
if (isPalindrome[j][i]) {
dpLeft[i]++;
}
}
if (i > 0) {
dpLeft[i] += dpLeft[i - 1];
}
}
vector<int> dpRight(n, 0);
for (int i = n - 1; i >= 0; --i) {
for (int j = i; j < n; ++j) {
if (isPalindrome[i][j]) {
dpRight[i]++;
}
}
if (i < n - 1) {
dpRight[i] += dpRight[i + 1];
}
}
int goodTriplets = 0;
for (int i = 1; i < n - 1; ++i) {
for (int j = i; j < n - 1; ++j) {
if (isPalindrome[i][j]) {
goodTriplets += dpLeft[i - 1] * dpRight[j + 1];
}
}
}
return goodTriplets;
}
int main() {
int t;
cint >> t;
while(t--){
string S;
cin >> S;
cout << countGoodTriplets(S) << endl;
}
return 0;
}
Palindromic triplet
Google โ
Source :Hola
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include<bits/stdc++.h>
#define pb push_back
#define int long long
using namespace std;
const int mod = 1e9+7;
const int K = 18;
int solve(int n, int m, vector<vector<int> > arr){
vector<pair<int, int> > a(n);
for(int i = 0; i < n; i++){
a[i].first = arr[i][1];
a[i].second = arr[i][0];
}
sort(a.begin(), a.end());
reverse(a.begin(), a.end());
int ans = 0;
priority_queue<int> pq;
int e = 0, price = 0;
for(int i = 0; i < n; i++){
price += a[i].second;
pq.push(-a[i].second);
e++;
if(e < m) continue;
if(e == m+1){
e--;
price += pq.top();
pq.pop();
}
ans = max(ans, price + a[i].first * m);
}
return ans;
}
int32_t main(){
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false);
int n, m;
cin>>n>>m;
vector<vector<int> > arr(n, vector<int>(2));
for(int i = 0; i < n; i++){
cin>>arr[i][0]>>arr[i][1];
}
cout<<solve(n, m, arr)<<endl;
return 0;
}
Maximizing Profit
Google โ
#define pb push_back
#define int long long
using namespace std;
const int mod = 1e9+7;
const int K = 18;
int solve(int n, int m, vector<vector<int> > arr){
vector<pair<int, int> > a(n);
for(int i = 0; i < n; i++){
a[i].first = arr[i][1];
a[i].second = arr[i][0];
}
sort(a.begin(), a.end());
reverse(a.begin(), a.end());
int ans = 0;
priority_queue<int> pq;
int e = 0, price = 0;
for(int i = 0; i < n; i++){
price += a[i].second;
pq.push(-a[i].second);
e++;
if(e < m) continue;
if(e == m+1){
e--;
price += pq.top();
pq.pop();
}
ans = max(ans, price + a[i].first * m);
}
return ans;
}
int32_t main(){
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false);
int n, m;
cin>>n>>m;
vector<vector<int> > arr(n, vector<int>(2));
for(int i = 0; i < n; i++){
cin>>arr[i][0]>>arr[i][1];
}
cout<<solve(n, m, arr)<<endl;
return 0;
}
Maximizing Profit
Google โ
๐1
#include <bits/stdc++.h>
#define ll long long
using namespace std;
void Sieve(ll n, vector<ll>& primes) {
vector<bool> prime(n + 1, true);
for (ll p = 2; p * p <= n; p++) {
if (!prime[p]) continue;
for (ll i = p * p; i <= n; i += p) {
prime[i] = false;
}
}
for (ll i = 2; i <= n; i++) {
if (prime[i]) {
primes.push_back(i);
}
}
}
bool isPrime(ll n, vector<ll>& primes) {
auto it = find(primes.begin(), primes.end(), n);
return it != primes.end();
}
void dfs(ll s, ll p, ll mod, vector<vector<ll>>& adj, vector<vector<ll>>& dp, vector<ll>& primes) {
for (ll i = 0; i < 25; i++) {
dp[s][i] = 1;
}
for (auto u : adj[s]) {
if (u != p) {
dfs(u, s, mod, adj, dp, primes);
for (ll i = 0; i < 25; i++) {
ll pos = 0;
for (ll j = 0; j < 25; j++) {
if (!isPrime(primes[i] + primes[j], primes)) {
pos = (pos + dp[u][j]) % mod;
}
}
dp[s][i] = (dp[s][i] * pos) % mod;
}
}
}
}
long long Validasignment(int n, vector<vector<int>>& edges) {
ll mod = 1000000007;
vector<ll> primes;
Sieve(200, primes);
vector<vector<ll>> dp(n + 1, vector<ll>(25, 0));
vector<vector<ll>> adj(n + 1);
for (int i = 0; i < n - 1; i++) {
adj[edges[i][0]].push_back(edges[i][1]);
adj[edges[i][1]].push_back(edges[i][0]);
}
dfs(1, -1, mod, adj, dp, primes);
ll ans = 0;
for (ll i = 0; i < 25; i++) {
ans = (ans + dp[1][i]) % mod;
}
return ans;
}
Google โ
๐1
#include <bits/stdc++.h>
using namespace std;
int equalzeroandone(vector<int>v){
int n=v.size();
for(int i=0;i<n;i++){
if(v[i]==0){
v[i]=-1;
}
}
int sum=0;
int ans=-1;
map<int,int>mp;
for(int i=0;i<n;i++){
sum+=v[i];
if(sum==0){
ans=i+1;
}
if(mp.find(sum)!=mp.end()){
ans=max(ans,i-mp[sum]);
}
else{
mp[sum]=i;
}
}
return ans;
}
int main() {
int n;
cin>>n;
vector<int>v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
cout<<equalzeroandone(v);
}
Equal number of zero
Infosys
using namespace std;
int equalzeroandone(vector<int>v){
int n=v.size();
for(int i=0;i<n;i++){
if(v[i]==0){
v[i]=-1;
}
}
int sum=0;
int ans=-1;
map<int,int>mp;
for(int i=0;i<n;i++){
sum+=v[i];
if(sum==0){
ans=i+1;
}
if(mp.find(sum)!=mp.end()){
ans=max(ans,i-mp[sum]);
}
else{
mp[sum]=i;
}
}
return ans;
}
int main() {
int n;
cin>>n;
vector<int>v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
cout<<equalzeroandone(v);
}
Equal number of zero
Infosys
public static int findLargestSquareSize(List<List<Integer>> samples) {
// Write your code here int R = samples.size();
if (R == 0) return 0;
int C = samples.get(0).size();
int[][] S = new int[R][C];
int[][] M = new int[R][C];
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
M[i][j] = samples.get(i).get(j);
}
}
for (int i = 0; i < R; i++)
S[i][0] = M[i][0];
for (int j = 0; j < C; j++)
S[0][j] = M[0][j];
for (int i = 1; i < R; i++) {
for (int j = 1; j < C; j++) {
if (M[i][j] == 1) {
S[i][j] = Math.min(S[i][j - 1], Math.min(S[i - 1][j], S[i - 1][j - 1])) + 1;
} else {
S[i][j] = 0;
}
}
}
int max_of_s = S[0][0];
int max_i = 0;
int max_j = 0;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (max_of_s < S[i][j]) {
max_of_s = S[i][j];
max_i = i;
max_j = j;
}
}
}
return Math.abs((max_i - max_of_s) - max_i);
}.
findLargestSquareSize
Linkdin โ
vector<int>findSubsequence(vector<int>arr){
map<int,int>m;
vector<int>ans;
int maxi=0;
int n=arr.size();
for(int i=0;i<n;i++){
if(m[arr[i]]>0){
if(arr[i]<maxi){
return {-1};
}
else{
maxi=max(maxi,arr[i]);
ans.push_back(arr[i]);
}
}
m[arr[i]]++;
}
return ans;
}
Find sequenceโ
map<int,int>m;
vector<int>ans;
int maxi=0;
int n=arr.size();
for(int i=0;i<n;i++){
if(m[arr[i]]>0){
if(arr[i]<maxi){
return {-1};
}
else{
maxi=max(maxi,arr[i]);
ans.push_back(arr[i]);
}
}
m[arr[i]]++;
}
return ans;
}
Find sequenceโ
๐1
def twins(a, b):
result = []
for first, second in zip(a, b):
if sorted(first[::2]) == sorted(second[::2]) and sorted(first[1::2]) == sorted(second[1::2]):
result.append('Yes')
else:
result.append('No')
return result
Twin linked โ
long long solve(int n,vector<int>v){
long long ans=0;
sort(v.begin(),v.end());
for(int i=1;i<n;i++){
if(v[i]<=v[i-1]){
v[i]=v[i-1]+1;
}
}
ans=accumulate(v.begin(),v.end(),0);
return ans;
}
Minimum unique sum
long long ans=0;
sort(v.begin(),v.end());
for(int i=1;i<n;i++){
if(v[i]<=v[i-1]){
v[i]=v[i-1]+1;
}
}
ans=accumulate(v.begin(),v.end(),0);
return ans;
}
Minimum unique sum
import java.io.*;
import java.util.*;
public class Main {
public static String trim(String str) {
return str.trim();
}
public static int solve(int N, List<Integer> A) {
int totalSum = A.stream().mapToInt(Integer::intValue).sum();
int leftSum = 0;
int equilibriumCount = 0;
for (int i = 0; i < N; ++i) {
int rightSum = totalSum - leftSum - A.get(i);
if (leftSum == rightSum) {
equilibriumCount++;
}
leftSum += A.get(i);
}
return equilibriumCount;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputLine = br.readLine();
int N = Integer.parseInt(trim(inputLine));
List<Integer> A = new ArrayList<>();
for (int j = 0; j < N; j++) {
inputLine = br.readLine();
A.add(Integer.parseInt(trim(inputLine)));
}
int result = solve(N, A);
System.out.println(result);
}
}
//Equilbrium path (try)
import java.util.*;
public class Main {
public static String trim(String str) {
return str.trim();
}
public static int solve(int N, List<Integer> A) {
int totalSum = A.stream().mapToInt(Integer::intValue).sum();
int leftSum = 0;
int equilibriumCount = 0;
for (int i = 0; i < N; ++i) {
int rightSum = totalSum - leftSum - A.get(i);
if (leftSum == rightSum) {
equilibriumCount++;
}
leftSum += A.get(i);
}
return equilibriumCount;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputLine = br.readLine();
int N = Integer.parseInt(trim(inputLine));
List<Integer> A = new ArrayList<>();
for (int j = 0; j < N; j++) {
inputLine = br.readLine();
A.add(Integer.parseInt(trim(inputLine)));
}
int result = solve(N, A);
System.out.println(result);
}
}
//Equilbrium path (try)
๐2