#include <iostream>
#define ll long long
#include <vector>
using namespace std;
ll minSelectionsInWorstCase(vector<int>& choices) {
ll n = choices.size();
vector<int> s(n, 0);
ll t = 0;
s[n - 1] = choices[n - 1];
for (int i = n - 2; i >= 0; --i) {
s[i] = choices[i] + s[i + 1];
}
t = s[0];
return t;
}
Backbencher and bug โ
๐1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include<bits/stdc++.h>
using namespace std;
#define int long long
int solve(int n, vector<int>& front, vector<int>& back, int frontend, int backend) {
vector<vector<int>> dp(n + 1, vector<int>(frontend + 1, INT_MAX));
dp[0][0] = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= frontend; j++) {
if (dp[i][j] == INT_MAX) continue;
if (j < frontend) {
dp[i + 1][j + 1] = min(dp[i + 1][j + 1], dp[i][j] + front[i]);
}
int b = i - j;
if (b < backend) {
dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + back[i]);
}
}
}
return dp[n][frontend];
}
int32_t main() {
int frontend, backend;
cin >> frontend >> backend;
int n = frontend + backend;
vector<int> front(n), back(n);
for (int i = 0; i < n; i++) {
cin >> front[i];
}
for (int i = 0; i < n; i++) {
cin >> back[i];
}
int result = solve(n, front, back, frontend, backend);
cout << result << endl;
return 0;
}
Hiring Drive โ
#include <bits/stdc++.h>
#define MOD 1000000007
using namespace std;
int solve(int n, int m, int x, vector<int>& a) {
int rem = m % x;
if (rem == 0) {
return m % MOD;
}
int minAdd = -1;
for (int i = 0; i < n; i++) {
int add = a[i];
if ((m + add) % x == 0) {
if (minAdd == -1 || add < minAdd) {
minAdd = add;
}
}
}
if (minAdd == -1) {
return -1;
}
return (m + minAdd) % MOD;
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m, x;
cin >> n >> m >> x;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int res =solve(n, m, x, a);
cout << res << endl;
}
return 0;
}
Greedy power โ
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
int32_t main(){
ll n,m;
cin>>n>>m;
vector<ll> a(n);
vector<ll> b(m);
vector<ll> pre(n+1);
for(int i=0;i<n;i++){
cin>>a[i];
pre[i+1]=pre[i]+a[i];
}
for(int i=0;i<m;i++){
cin>>b[i];
}
ll k=(1LL<<m)-1;
ll dp[n+1][k+1];
for(int i=0;i<=n;i++){
for(int j=0;j<=k;j++){
dp[i][j]=0;
}
}
for(int i=1;i<=n;i++){
for(int j=0;j<=k;j++){
dp[i][j]=max(dp[i][j],dp[i-1][j]);
for(int l=0;l<m;l++){
if((1LL<<l)&j){
}
else{
ll next=(1LL<<l)|j,idx=i+b[l]-1;
if(idx>=0 and idx<=n)
dp[idx][next]=max(dp[idx][next],dp[i-1][j]+pre[idx]-pre[i-1]);
}
}
}
}
ll ans=0;
for(int i=0;i<=n;i++){
ans=max(dp[i][k],ans);
}
cout<<ans<<endl;
return 0;
}
Seat Bookingโ
๐1
๐๐ฆ ๐๐น๐ด๐ผ ๐ป ๐ ใ๐๐ผ๐บ๐ฝ๐ฒ๐๐ถ๐๐ถ๐๐ฒ ๐ฃ๐ฟ๐ผ๐ด๐ฟ๐ฎ๐บ๐บ๐ถ๐ป๐ดใ
Photo
#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<vector<int>> solve(vector<int> &v){
int n=v.size();
vector<bool> found(n+1,false);
int curr=1;
vector<vector<int>> ans;
for(auto x:v){
found[x]=true;
vector<int> temp;
if(found[curr]){
while(curr<=n && found[curr] ){
temp.push_back(curr);
curr++;
}
}
else{
temp.push_back(-1);
}
ans.push_back(temp);
}
return ans;
}
int32_t main(){
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; i++){
cin>>v[i];
}
vector<vector<int>> ans=solve(v);
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
}
Amazon โ
using namespace std;
#define int long long
vector<vector<int>> solve(vector<int> &v){
int n=v.size();
vector<bool> found(n+1,false);
int curr=1;
vector<vector<int>> ans;
for(auto x:v){
found[x]=true;
vector<int> temp;
if(found[curr]){
while(curr<=n && found[curr] ){
temp.push_back(curr);
curr++;
}
}
else{
temp.push_back(-1);
}
ans.push_back(temp);
}
return ans;
}
int32_t main(){
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; i++){
cin>>v[i];
}
vector<vector<int>> ans=solve(v);
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
}
Amazon โ
#include <bits/stdc++.h>
using namespace std;
#define ll long long
vector<ll> msk(1024,-1);
void digits(ll num1) {
string str1 = to_string(num1);
set<ll>s;
for (char digit : str1) {
ll d=digit-'0';
s.insert(d);
}
ll val=0;
for(auto it:s) val+=(1<<it);
msk[val]=max(msk[val],num1);
}
ll solution(vector<ll>& A) {
for(auto &it:msk) it=-1;
ll ans=-1;
for(auto it:A) digits(it);
for(ll i=1;i<1024;i++){
if(msk[i]==-1) continue;
for(ll j=i+1;j<1024;j++){
if(msk[j]==-1) continue;
ll fl=0;
for(ll k=0;k<10;k++){
if((1<<k)&i){
if((1<<k)&j){
fl=1;
continue;
}
}
}
if(fl) continue;
ans=max(ans,msk[i]+msk[j]);
}
}
return ans;
}
Microsoft โ
#include <bits/stdc++.h>
using namespace std;
#define int long long
int32_t main() {
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
multiset<pair<int, int>> s;
for (int i = 0; i < n; i++) {
s.insert({v[i], i});
}
int ans = 0;
vector<bool> vis(n, false);
while (!s.empty()) {
auto [x, i] = *prev(s.end());
s.erase(prev(s.end()));
ans += x;
vis[i] = true;
int left = (i - 1 + n) % n;
int right = (i + 1) % n;
while (vis[right]) {
right = (right + 1) % n;
}
vis[right] = true;
s.erase({v[right], right});
while (vis[left]) {
left = (left - 1 + n) % n;
}
vis[left] = true;
s.erase({v[left], left});
}
cout << ans << endl;
}
Kickdrum โ
using namespace std;
#define int long long
int32_t main() {
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
multiset<pair<int, int>> s;
for (int i = 0; i < n; i++) {
s.insert({v[i], i});
}
int ans = 0;
vector<bool> vis(n, false);
while (!s.empty()) {
auto [x, i] = *prev(s.end());
s.erase(prev(s.end()));
ans += x;
vis[i] = true;
int left = (i - 1 + n) % n;
int right = (i + 1) % n;
while (vis[right]) {
right = (right + 1) % n;
}
vis[right] = true;
s.erase({v[right], right});
while (vis[left]) {
left = (left - 1 + n) % n;
}
vis[left] = true;
s.erase({v[left], left});
}
cout << ans << endl;
}
Kickdrum โ
#include <bits/stdc++.h>
#define ll long long
using namespace std;
string mergePalindrome(string&a,string&b)
{
ll n=a.length();
ll m=b.length();
unordered_map<char,ll> m1,m2;
for(char it:a) m1[it]++;
for(char it:b) m2[it]++;
string mid="",ans="";
for (char i='a';i<='z';i++)
{
if(m1[i]%2 and m2[i]%2 and mid.length()<=1) mid=string(2,i);
if((m1[i]%2 or m2[i]%2) and mid.length()==0) mid=i;
ans+=string((m1[i]/2+m2[i]/2),i);
}
string tt=ans;
if (mid.length()==2)
{
tt+=mid[0];
ans+=mid[0];
sort(begin(ans),end(ans));
tt=ans+string(rbegin(ans),rend(ans));
}
else tt+=mid+string(rbegin(ans),rend(ans));
return tt;
}
signed main()
{
string s,t; cin>>s>>t;
cout<<solve(s,t);
return 0;
}
Merging palindromes โ
#define ll long long
using namespace std;
string mergePalindrome(string&a,string&b)
{
ll n=a.length();
ll m=b.length();
unordered_map<char,ll> m1,m2;
for(char it:a) m1[it]++;
for(char it:b) m2[it]++;
string mid="",ans="";
for (char i='a';i<='z';i++)
{
if(m1[i]%2 and m2[i]%2 and mid.length()<=1) mid=string(2,i);
if((m1[i]%2 or m2[i]%2) and mid.length()==0) mid=i;
ans+=string((m1[i]/2+m2[i]/2),i);
}
string tt=ans;
if (mid.length()==2)
{
tt+=mid[0];
ans+=mid[0];
sort(begin(ans),end(ans));
tt=ans+string(rbegin(ans),rend(ans));
}
else tt+=mid+string(rbegin(ans),rend(ans));
return tt;
}
signed main()
{
string s,t; cin>>s>>t;
cout<<solve(s,t);
return 0;
}
Merging palindromes โ
๐1