Submission #44081305


Source Code Expand

#include<vector>
#include<map>
#include<set>
#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<string>
#include<bitset>
#include<stdio.h>
#include<utility>
#include<queue>
#include<stack>
#include<deque>
#include<iterator>
#include<list>
#include<iomanip>
#include<chrono>
#include<unordered_set>
#include<string>
#include<cmath>
#include<cstring>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fast ios_base::sync_with_stdio(0),cin.tie(0)
#define ll long long
#define cout std::cout
#define cin std::cin
#define yes cout<<"YES"<<endl;
#define no cout<<"NO"<<endl;
#define pb push_back
#define sorta(vec) sort(vec.begin(),vec.end())
#define sortd(vec) sort(vec.begin(),vec.end(),greater<int>())
#define pb push_back
#define vll vector<long long int>
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>pbds; // find_by_order, order_of_key(0-indexed)
//less , less_equal , greater , greater_equal -> rule for insertion
#define start_execution auto start = std::chrono::high_resolution_clock::now();
#define stop_execution auto stop = std::chrono::high_resolution_clock::now();
#define execution_time auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start); cerr<<"Time taken : "<<((long double)duration.count())/((long double)1e9) <<"s"<<endl; 
#define nline "\n"
#define all(v) (v).begin(),(v).end()
#define pii pair<ll int,ll int>
#define piii pair<ll int,pair<ll int,ll int>>
#define mem(a,k) memset(a,k,sizeof(a));
// void print_with_precision(double val,int n)
// {
//     cout << fixed << setprecision(n) <<val<<endl;
// }
void debug(int x)
{
    cout<<"Value Debugged is "<<x<<endl;
}
void debug(vector<int>x)
{
    cout<<"Value Debugged is "<<endl;
    for(auto y:x)
    {
        cout<<y<<" ";
    }
    cout<<endl;
}
void yn(bool res){if(res==true){yes;}else{no;}}
ll mod=1000000007;
ll mod_add(ll a, ll b) {a = a % mod; b = b % mod; return (((a + b) % mod) + mod) % mod;}
ll mod_mul(ll a, ll b) {a = a % mod; b = b % mod; return (((a * b) % mod) + mod) % mod;}
ll mod_sub(ll a, ll b) {a = a % mod; b = b % mod; return (((a - b) % mod) + mod) % mod;}
ll int inv(ll int r)
{
	if(r==1) return 1;
	return (mod-((mod/r)*inv(mod%r))%mod+mod)%mod;
}
ll mod_div(ll a,ll b){return (a*inv(b))%mod;}
ll int ceil_div(ll int a,ll int b)
{
    ll int k=a%b;
    if(k>0) return (a/b)+1;
    return a/b;
}
ll gcd(ll a, ll b)
{
    if (!a)
        return b;
    return gcd(b % a, a);
}
ll int lcm(ll int a,ll int b)
{
    ll int g=__gcd(a,b);
    return (1LL*a*b)/g;
}

ll int pwr(ll int a,ll int b, ll int n)
{
    int modd=1;
    if(b==0)
        return 1;
    if(b%2==0)
    {
        ll int ans1=pwr(a,b/2,n);
        ll int ans2=(ans1*ans1);
        if(ans1==-1 || ans2>n)
        {
            //return -1;
        }
        return ans2;
    }
    ll int ans1=pwr(a,b/2,n);
    ll int ans2=(ans1*ans1);
    if(ans1==-1 || ans2>n)
    {
           // return -1;
    }
    ans2=(ans2*a);
    if(ans2>n)
    {
        //return -1;
    }
    return ans2;
}

ll int fact(ll int n)
{
    if(n<0)
    {return 0;}
    ll int ans=1;
    if(n==0) return 1;
    for(int i=1;i<=n;i++){ans=(ans*i)%mod;}return ans;
}
vector<ll> sieve(int n)
{
    int*arr = new int[n + 1]();
    vector<ll> vect;
    for (int i = 2; i <= n; i++)
    if (arr[i] == 0)
    {
        vect.push_back(i);
        for (int j = 2 * i; j <= n; j += i)
        arr[j] = 1;
    }
    return vect;
}
/*ll int Combination(ll int n,ll int r)
{
    void pre()
    {
        for(int i=1;i<=100003;i++)
        {
            dp[i]=(1LL*dp[i-1]*i)%mod;
        }
    }
    if(r==0)
    {
        return 1;
    }
    ll int ans1=dp[n];ll int ans2=dp[r];
    ll int ans3=dp[n-r];ll int ans=(ans1*inv(ans2))%mod;
    ans=(ans*inv(ans3))%mod;return ans;
}*/

template<class ForwardIterator>
void read(ForwardIterator first,ForwardIterator last) 
{
    while (first != last) 
    {
        cin >> (*first);
        ++first;
    }
}
template<class T>
void read(vector<T> &v) 
{
    read(v.begin(), v.end());
}
vector<vector<int>>tree_input(int n)
{
    vector<vector<int>>tree(n+1);
    for(int i=0;i<n-1;i++)
    {
        int u,v;
        cin>>u>>v;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }
    return tree;
}


bool cmp(vector<int>&v1,vector<int>&v2)
{
    if(v1[0]>v2[0])
    {
        return true;
    }
    return false;
}

bool cmp2(vector<ll int>&v1,vector<ll int>&v2)
{
    if(v1[0]<v2[0])
    {
        return true;
    }
    return false;
}
//Code starts here



int main()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    #endif
    fast;
    //start_execution
    int tt=1;
    //cin>>tt;
    for(int tc=0;tc<tt;tc++)
    {
        ll int n,m;
        cin>>n>>m;

        vector<int>v1;
        vector<int>v2;
        vector<int>v3;

        for(int i=0;i<n;i++)
        {
            int t,x;
            cin>>t>>x;

            if(t==0)
            {
                v1.push_back(x);
            }
            else if(t==1)
            {
                v2.push_back(x);
            }
            else if(t==2)
            {
                v3.push_back(x);
            }
        }

        sort(all(v1));
        reverse(all(v1));

        sort(all(v2));
        reverse(all(v2));

        sort(all(v3));
        reverse(all(v3));

        vector<ll int>ps(v2.size(),0);
        vector<ll int>ps1;
        if(v2.size()>0)
        {
            ps[0]=v2[0];
        }

        if(v3.size()>0)
        {

        ps1.push_back(v3[0]);
        }
        for(int i=1;i<v2.size();i++)
        {
            ps[i]=ps[i-1]+v2[i];
        }
        for(int i=1;i<v3.size();i++)
        {
            ps1.push_back(ps1[i-1]+v3[i]);
        }


        ll int left=0;
        ll int right=10000000000000000;
        ll int ans=0;
        while(left<=right)
        {
           // cout<<left<<" "<<right<<endl;
            ll int mid=(left+right)/2;

            ll int tot=0;

            ll int av=m;

            int i=0;


            while(i<v1.size() && av>0)
            {
                if(v2.size()==0 || v1[i]>=v2[0])
                {
                    tot+=v1[i];
                    av--;
                }
                else
                {
                    break;
                }
                i++;
            }


            //now v1 available (i,..)
            //v2(0,..)

            //cout<<tot<<endl;

            ll int need=mid-tot;

            if(need<=0)
            {
                left=mid+1;
                continue;
            }

            vector<ll int>temp;

            int j=i;

            int t=av;

            while(i<v1.size() && t>0)
            {
               // cout<<i<<endl;
                if(temp.size()==0)
                {
                    temp.push_back(v1[i]);
                    t--;
                }
                else
                {
                    temp.push_back(temp.back()+v1[i]);
                    t--;
                }
                if(temp.back()>=need)
                {
                    break;
                }
                i++;
            }
           /* cout<<need<<endl;
            for(auto x:temp)
            {
                cout<<x<<" ";
            }
            cout<<endl;*/

            //take element from v2 from front then take coresponding from v1

            bool res=false;
           // cout<<"s"<<endl;
            for(int take=0;take<=av && take<=v2.size();take++)
            {
                if(take>0 && ps1.size()==0)
                {
                    break;
                }
                //cout<<take<<endl;
                auto d=lower_bound(all(ps1),take);
                if(d==ps1.end())
                {
                    continue;
                }
                //cout<<take<<endl;
                int rem=av-take;
                if(take>0)
                {
                    int inde=d-ps1.begin();
                    rem=rem-(inde)-1;
                }
                if(rem<0)
                {
                    continue;
                }
                ll int can=0;

                if(rem>0)
                {
                    int d=temp.size()-1;
                    can=temp[min(d,rem-1)];
                }
                if(take>0)
                {
                    //cout<<ps[take-1]<<endl;
                    int d=ps.size()-1;
                    can+=ps[min(d,take-1)];
                }

                if(can>=need)
                {
                    //cout<<take<<endl;
                    res=true;
                    break;
                }


            }

            if(res)
            {
                ans=mid;
                left=mid+1;
            }
            else
            {
                right=mid-1;
            }




        }

        cout<<ans<<endl;




    }
    //stop_execution
    //execution_time
    return 0; 
}

Submission Info

Submission Time
Task F - Cans and Openers
User silenttkillerr
Language C++ (GCC 9.2.1)
Score 0
Code Size 9498 Byte
Status RE
Exec Time 160 ms
Memory 7612 KiB

Compile Error

./Main.cpp: In function ‘long long int pwr(long long int, long long int, long long int)’:
./Main.cpp:96:9: warning: unused variable ‘modd’ [-Wunused-variable]
   96 |     int modd=1;
      |         ^~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:270:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  270 |         for(int i=1;i<v2.size();i++)
      |                     ~^~~~~~~~~~
./Main.cpp:274:22: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  274 |         for(int i=1;i<v3.size();i++)
      |                     ~^~~~~~~~~~
./Main.cpp:295:20: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  295 |             while(i<v1.size() && av>0)
      |                   ~^~~~~~~~~~
./Main.cpp:329:20: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  329 |             while(i<v1.size() && t>0)
      |                   ~^~~~~~~~~~
./Main.cpp:359:44: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  359 |             for(int take=0;take<=av && take<=v2.size();take++)
      |                                        ~~~~^~~~~~~~~~~
./Main.cpp:325:17: warning: unused variable ‘j’ [-Wunused-variable]
  325 |             int j=i;
      |                 ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 500
Status
AC × 3
AC × 43
WA × 2
RE × 1
Set Name Test Cases
Sample sample00.txt, sample01.txt, sample02.txt
All sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt
Case Name Status Exec Time Memory
sample00.txt AC 7 ms 3508 KiB
sample01.txt AC 2 ms 3404 KiB
sample02.txt AC 2 ms 3616 KiB
testcase00.txt WA 58 ms 4060 KiB
testcase01.txt AC 49 ms 5524 KiB
testcase02.txt RE 148 ms 5980 KiB
testcase03.txt AC 55 ms 4760 KiB
testcase04.txt AC 145 ms 6452 KiB
testcase05.txt WA 52 ms 4688 KiB
testcase06.txt AC 91 ms 5720 KiB
testcase07.txt AC 101 ms 6168 KiB
testcase08.txt AC 75 ms 5424 KiB
testcase09.txt AC 130 ms 6400 KiB
testcase10.txt AC 71 ms 5272 KiB
testcase11.txt AC 97 ms 6140 KiB
testcase12.txt AC 121 ms 6536 KiB
testcase13.txt AC 126 ms 6284 KiB
testcase14.txt AC 82 ms 5044 KiB
testcase15.txt AC 76 ms 5792 KiB
testcase16.txt AC 129 ms 6496 KiB
testcase17.txt AC 132 ms 6360 KiB
testcase18.txt AC 103 ms 7612 KiB
testcase19.txt AC 92 ms 5892 KiB
testcase20.txt AC 137 ms 6540 KiB
testcase21.txt AC 128 ms 6344 KiB
testcase22.txt AC 110 ms 5832 KiB
testcase23.txt AC 118 ms 5792 KiB
testcase24.txt AC 145 ms 6500 KiB
testcase25.txt AC 63 ms 4956 KiB
testcase26.txt AC 90 ms 6284 KiB
testcase27.txt AC 94 ms 5740 KiB
testcase28.txt AC 144 ms 6100 KiB
testcase29.txt AC 130 ms 6276 KiB
testcase30.txt AC 92 ms 6664 KiB
testcase31.txt AC 153 ms 5716 KiB
testcase32.txt AC 155 ms 6192 KiB
testcase33.txt AC 143 ms 6508 KiB
testcase34.txt AC 93 ms 6480 KiB
testcase35.txt AC 104 ms 6268 KiB
testcase36.txt AC 158 ms 6200 KiB
testcase37.txt AC 144 ms 6496 KiB
testcase38.txt AC 61 ms 5676 KiB
testcase39.txt AC 160 ms 5740 KiB
testcase40.txt AC 159 ms 6128 KiB
testcase41.txt AC 141 ms 6404 KiB
testcase42.txt AC 79 ms 5792 KiB