Submission #72728736


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
long long gcd(long long a, long long b){
    if(b == 0)return a;
    return gcd(b, a%b);
}
bool com(pair<long long, long long>a, pair<long long, long long>b){
    if( a.first * b.second < b.first* a.second){
        return 1;
    }
    else return 0;
}
map<pair<long long, pair<long long, long long>>, long long>m;
map<pair<long long, pair<long long, long long>>, long long>m2;
long long n, q;
vector<pair<long long, pair<long long, long long>>>v;
bool cmps(pair<long long, pair<long long, long long>>a, pair<long long, pair<long long, long long>>b){
    long long e = a.first;
    long long r = b.first;
    if(e == 0 && r == 0){
        return a.second.first > b.second.first;
    }  
    if(e == 1 && r == 0){
        return 0;
    }  
    if(e == 2 && r == 0){
        if(b.second.first>0)return 0;
        return 1;
    }  
    if(e == 0 && r == 1){
        return 1;        
    }  
    if(e == 1 && r == 1){
        return com(b.second, a.second);
    }  
    if(e == 2 && r == 1){
        return 1;
    }  
    if(e == 0 && r == 2){
        if(a.second.first>0)return 1;
        return 0;
    }  
    if(e == 1 && r == 2){
        return 0;
    }  

    if(e == 2 && r == 2){
        return com(b.second, a.second);
    }  
}
pair<long long, pair<long long, long long>>arr[2000001];
long long pfx[2000001];
int main() {
    cin >> n >> q;
    for(long long i =1; i<=n; i++){
        long long a, b;
        cin >>a >> b;
        pair<long long, pair<long long, long long>> t; // 0 : 무한대 1 : - 2 : +
        if(a < 0)t.first = 1;
        if(a>0)t.first = 2;
        if(a == 0){
            if(b <0){
                t.first = 0;
                t.second = {-1, 0};
            }
            else{
                t.first = 0;
                t.second = {1, 0};
            }
        }
        else if(b==0){
            t.second = {0, 1};
        }
        else{
            long long g;
            if(a*b < 0){
                if(a<0){
                    a *= -1;
                    b *= -1;
                }
                
                g = gcd(a, -b);
            }
            else if(a<0 &&  b<0){
                a *= -1;
                b *= -1;
                g = gcd(a, b);
            }
            else{
                g = gcd(a, b);
            }
            a /= g;
            b /= g;
            t.second = {b, a};
        }
        if(m.find(t) == m.end()){
            m.insert({t, 1});
            v.push_back(t);
        }
        else m[t]++;
        arr[i] = t;
        //cout << t.first<<t.second.first << t.second.second << '\n';
    }
    sort(v.begin(), v.end(), cmps);
    for(long long i = 0; i<v.size(); i++){
        m2.insert({v[i], i});
        pfx[i] = ((i>0)?pfx[i-1] : 0) + m[v[i]];
    }
    for(long long i = v.size(); i<2*v.size(); i++){
        pfx[i] = pfx[i-1] + m[v[i-v.size()]];
    }
    //for(long long i =0; i<v.size(); i++)cout << v[i].first << v[i].second.first << v[i].second.second << '\n';
    for(long long i = 1; i<=q; i++){
        long long a, b;
        cin >>a >>b;
        long long i1 = m2[arr[a]];
        long long i2 = m2[arr[b]];
        if(i1 > i2)i2 += v.size();
        if(i1 == 0){
            cout << pfx[i2] << '\n';
        }
        else cout << pfx[i2] - pfx[i1-1] << '\n';

    }
    return 0;
}   

Submission Info

Submission Time
Task E - Laser Takahashi
User tonystar0420
Language C++23 (GCC 15.2.0)
Score 450
Code Size 3534 Byte
Status AC
Exec Time 805 ms
Memory 47108 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:109:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |     for(long long i = 0; i<v.size(); i++){
      |                          ~^~~~~~~~~
./Main.cpp:113:34: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |     for(long long i = v.size(); i<2*v.size(); i++){
      |                                 ~^~~~~~~~~~~
./Main.cpp: In function 'bool cmps(std::pair<long long int, std::pair<long long int, long long int> >, std::pair<long long int, std::pair<long long int, long long int> >)':
./Main.cpp:54:1: warning: control reaches end of non-void function [-Wreturn-type]
   54 | }
      | ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 3
AC × 33
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 02_random2_00.txt, 02_random2_01.txt, 02_random2_02.txt, 02_random2_03.txt, 02_random2_04.txt, 02_random2_05.txt, 02_random2_06.txt, 02_random2_07.txt, 02_random2_08.txt, 02_random2_09.txt, 03_random3_00.txt, 03_random3_01.txt, 03_random3_02.txt, 03_random3_03.txt, 03_random3_04.txt, 04_handmade_00.txt, 04_handmade_01.txt, 04_handmade_02.txt, 05_killer_00.txt, 05_killer_01.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3448 KiB
00_sample_01.txt AC 1 ms 3464 KiB
00_sample_02.txt AC 1 ms 3464 KiB
01_random_00.txt AC 268 ms 13456 KiB
01_random_01.txt AC 612 ms 46148 KiB
01_random_02.txt AC 667 ms 41996 KiB
01_random_03.txt AC 21 ms 5156 KiB
01_random_04.txt AC 649 ms 47036 KiB
01_random_05.txt AC 805 ms 47108 KiB
01_random_06.txt AC 782 ms 47028 KiB
01_random_07.txt AC 794 ms 46964 KiB
01_random_08.txt AC 797 ms 47064 KiB
01_random_09.txt AC 779 ms 47036 KiB
02_random2_00.txt AC 728 ms 41732 KiB
02_random2_01.txt AC 705 ms 41740 KiB
02_random2_02.txt AC 719 ms 41776 KiB
02_random2_03.txt AC 726 ms 41892 KiB
02_random2_04.txt AC 694 ms 41776 KiB
02_random2_05.txt AC 714 ms 41800 KiB
02_random2_06.txt AC 695 ms 41736 KiB
02_random2_07.txt AC 698 ms 41772 KiB
02_random2_08.txt AC 703 ms 41736 KiB
02_random2_09.txt AC 708 ms 41760 KiB
03_random3_00.txt AC 644 ms 39228 KiB
03_random3_01.txt AC 504 ms 31464 KiB
03_random3_02.txt AC 412 ms 23588 KiB
03_random3_03.txt AC 307 ms 15836 KiB
03_random3_04.txt AC 218 ms 8256 KiB
04_handmade_00.txt AC 187 ms 8160 KiB
04_handmade_01.txt AC 187 ms 8108 KiB
04_handmade_02.txt AC 122 ms 3680 KiB
05_killer_00.txt AC 621 ms 43120 KiB
05_killer_01.txt AC 636 ms 43116 KiB