제출 #742754

#제출 시각아이디문제언어결과실행 시간메모리
742754speedyArda이상한 기계 (APIO19_strange_device)C++14
5 / 100
4634 ms524288 KiB
#include "bits/stdc++.h"

using namespace std;
using ll = long long;
const int MAXN = 2e6+5;
map<ll, bool> visited;
vector< pair<ll, ll> > imp;
ll n, a, b;

int main() 
{
    /*for(ll a = 1; a <= 20; a++)
    {
        for(ll b = 1; b <= 20; b++)
        {
            map<pair<ll, ll> , bool> used;
            ll time = 0;
            while(!used[{(time + time / b) % a, time % b}])
            {
                used[{(time + time / b) % a, time % b}] = true;
                time++;
            }
            cout << a << " " << b << " " << time << "\n"; 
        }
    }*/
    cin >> n >> a >> b;
    ll sum = 0;
    ll big = 1;
    map<pair<ll, ll>, bool> used;
    ll time = 0;
    while(!used[{(time + time / b) % a, time % b}])
    {
        used[{(time + time / b) % a, time % b}] = true;
        time++;
    }
    big = time;
    /*if(2e18 / b < a)
        big = 2e18;
    else
        big = a * b;*/
    for(int i = 1; i <= n; i++)
    {

        ll f, s;
        cin >> f >> s;

        if(s - f >= big - 1)
        {
            imp.push_back({0, 1});
            imp.push_back({big - 1, 2});
        } else 
        {
            if(f % big <= s % big)
            {
                imp.push_back({f % big, 1});
                imp.push_back({s % big, 2});
            } else 
            {
                imp.push_back({0, 1});
                imp.push_back({s % big, 2});
                imp.push_back({f % big, 1});
                imp.push_back({big - 1, 2});
            }

        }

       
    }

   // cout << seg[0].sum << "\n";
    sort(imp.begin(), imp.end());
        ll cnt = 0;
        ll ans = 0;
        ll last = -1;
        for(pair<ll, ll> e : imp)
        {
            //cout << ans << " " << cnt << " " << last << "\n";
            if(last != -1 && cnt > 0)
            {
                ans += e.first - last;
                if(!visited[last])
                {
                    ans++;
                    visited[last] = true;
                }
                visited[e.first] = true;
            }
            if(e.second == 1)
            {
                cnt++;
                last = e.first;
            } else 
            {   
                cnt--;
                last = e.first;
            }   
        }
        cout << ans << "\n";
}

컴파일 시 표준 에러 (stderr) 메시지

strange_device.cpp: In function 'int main()':
strange_device.cpp:27:8: warning: unused variable 'sum' [-Wunused-variable]
   27 |     ll sum = 0;
      |        ^~~
#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...