A. Swayamwar
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
string s1, s2; cin >> s1 >> s2;
int m=0, r=0;
for(char c:s2) {
if(c == 'm') m++;
else r++;
}
for(char c:s1) {
if(c == 'm') {
if(m) m--;
else break;
} else {
if(r) r--;
else break;
}
}
cout << m+r;
return 0;
}
B. Digit Pairs
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
int temp, small, large, num;
unordered_map<int, int> odd, even;
for(int i=0; i<n; i++) {
cin >> temp;
small=10, large=0;
while(temp > 0) {
small = min(small, temp%10);
large = max(large, temp%10);
temp /= 10;
}
num = large*11 + small*7;
if(num > 99) num = num%100;
num /= 10;
if(i & 1) odd[num]++;
else even[num]++;
}
int ans = 0;
int pairs[10] = {0};
for(auto x:odd) pairs[x.first] += min(x.second-1, 2);
for(auto x:even) pairs[x.first] += min(x.second-1, 2);
for(int x:pairs) ans += min(2, x);
cout << ans;
return 0;
}
C. Dole Out Cadbury
#include<bits/stdc++.h>
using namespace std;
int main() {
int p,q,r,s; cin>>p>>q>>r>>s;
int ans = 0;
for(int i=p; i<=q; i++) {
for(int j=r; j<=s; j++) {
int a = max(i, j), b = min(i, j);
while(a>0 && b>0) {
swap(a, b);
int x = b / a;
ans += x;
b -= a*x;
}
}
}
cout << ans;
return 0;
}
D. Petrol Pump
#include<bits/stdc++.h>
using namespace std;
int subset(vector<int> &arr, int s) {
int n = arr.size();
bool dp[n+1][s+1];
for(int i=0; i<=s; i++) dp[0][i] = false;
for(int i=0; i<=n; i++) dp[i][0] = true;
for(int i=1; i<=n; i++) {
for(int j=1; j<=s; j++) {
dp[i][j] = dp[i-1][j];
if(arr[i-1] <= j) dp[i][j] = dp[i][j] || dp[i-1][j-arr[i-1]];
}
}
int i=s;
for(; i>=0; i--) {
if(dp[n][i]) break;
}
return i;
}
int main() {
vector<int> arr;
int sum=0;
string inp, t;
getline(cin, inp);
stringstream ss(inp);
while(ss >> t) {
int n = stoi(t);
arr.push_back(n);
sum += n;
}
int ans = subset(arr, sum/2);
cout << max(ans, sum-ans);
return 0;
}
E. Grooving Monkeys
#include<bits/stdc++.h>
#define int long long
using namespace std;
int Find(int i, int *Parent) {
if(Parent[i] != i) Parent[i] = Find(Parent[i], Parent);
return Parent[i];
}
void Union(int i, int temp, int *Rank, int *Parent) {
int x = Find(i, Parent);
int y = Find(temp, Parent);
if(Rank[x] < Rank[y]) Parent[x] = Parent[y];
else if(Rank[x] > Rank[y]) Parent[y] = Parent[x];
else {
Parent[y] = Parent[x];
Rank[x]++;
}
}
signed main() {
int t; cin >> t;
while(t--) {
int n; cin >> n;
int temp;
int Rank[n], Parent[n];
for(int i=0; i<n; i++) Rank[i] = 0;
for(int i=0; i<n; i++) Parent[i] = i;
for(int i=1; i<=n; i++) {
cin >> temp;
Union(i-1, temp-1, Rank, Parent);
}
for(int i=0; i<n; i++) Find(i, Parent);
unordered_map<int, int> freq;
for(int p:Parent) freq[p]++;
unordered_set<int> s;
for(auto x:freq) s.insert(x.second);
vector<int> v;
for(int x:s) v.push_back(x);
int l=v[0];
for(int i=1; i<(int)v.size(); i++) {
l = (v[i]*l) / (__gcd(v[i], l));
}
cout << l << endl;
}
return 0;
}
F. Death Battle
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ncr[105][105];
void fill_ncr() {
for(int n=1; n<105; n++) {ncr[n][1] = n; ncr[n][0] = 1;}
for(int n=2; n<105; n++) {
for(int r=2; r<105; r++) {
ncr[n][r] = ncr[n-1][r-1] + ncr[n-1][r];
}
}
}
int pow(int x, int n) {
int res = 1;
while(n > 0) {
if(n&1) {res = res*x; n--;}
x=x*x; n=n/2;
}
return res;
}
void add(int &n1, int &d1, int n2, int d2) {
n1 = (d2*n1 + d1*n2);
d1 = (d1 * d2);
int g = __gcd(n1, d1);
n1 /= g; d1 /= g;
}
void mul(int &n1, int &d1, int n2, int d2) {
n1 = (n1 * n2);
d1 = (d1 * d2);
int g = __gcd(n1, d1);
n1 /= g; d1 /= g;
}
signed main() {
fill_ncr();
int t; cin >> t;
while(t--) {
int a,h,l1,l2,m,c; cin>>a>>h>>l1>>l2>>m>>c;
int numerator = h - m*a;
if(numerator <= 0) {cout<<"1/1\n"; continue;}
if(numerator > m*c) {cout<<"RIP\n"; continue;}
int p = ceil((float)numerator / c);
int an=0, ad=1;
for(; p<=m; p++) {
int mn=1, md=1;
mul(mn, md, ncr[m][p]*pow(l1, p), pow(l2, p));
mul(mn, md, pow((l2-l1), (m-p)), pow(l2, (m-p)));
add(an, ad, mn, md);
}
cout << an << "/" << ad << endl;
}
return 0;
}