Submission #221628

#TimeUsernameProblemLanguageResultExecution timeMemory
221628MKopchevStrange Device (APIO19_strange_device)C++14
100 / 100
1050 ms102072 KiB
#include<bits/stdc++.h>
using namespace std;
const int nmax=1e6+42;
const long long inf=1e18;

int n;
long long A,B;

pair<long long,long long> inp[nmax];

vector< pair<long long,long long> > segments;

vector< pair<long long,int> > active;

bool cmp(pair<long long,int> s,pair<long long,int> t)
{
    if(s.first!=t.first)return s.first<t.first;
    return s.second>t.second;
}
int main()
{
    scanf("%i%lld%lld",&n,&A,&B);

    A=A/__gcd(A,B+1);

    for(int i=1;i<=n;i++)
    {
        scanf("%lld%lld",&inp[i].first,&inp[i].second);

        if(A>inf/B)segments.push_back(inp[i]);
        else
        {
            if(inp[i].second-inp[i].first+1>=A*B)
            {
                printf("%lld\n",A*B);
                return 0;
            }

            inp[i].first=inp[i].first%(A*B);
            inp[i].second=inp[i].second%(A*B);

            if(inp[i].first<=inp[i].second)segments.push_back(inp[i]);
            else
            {
                segments.push_back({inp[i].first,A*B-1});
                segments.push_back({0,inp[i].second});
            }
        }
    }

    for(auto k:segments)
    {
        active.push_back({k.first,1});
        active.push_back({k.second+1,-1});

        //cout<<k.first<<" "<<k.second<<endl;
    }

    sort(active.begin(),active.end(),cmp);

    int sum=1;

    long long output=0;

    for(int i=1;i<active.size();i++)
    {
        if(sum)output+=active[i].first-active[i-1].first;

        sum=sum+active[i].second;

        //cout<<i<<" -> "<<sum<<" "<<output<<" "<<active[i].first<<" "<<active[i].second<<endl;
    }

    printf("%lld\n",output);
    return 0;
}

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:65:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=1;i<active.size();i++)
                 ~^~~~~~~~~~~~~~
strange_device.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%lld%lld",&n,&A,&B);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:28:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld%lld",&inp[i].first,&inp[i].second);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...