QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#121418#1148. Gamesomethingnew#Compile Error//C++206.7kb2023-07-08 04:31:482024-07-04 00:30:08

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 00:30:08]
  • 评测
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-08 04:31:48]
  • 提交

answer

//  ↘ ⬇ ⬇ ⬇ ⬇ ⬇ ↙
//  ➡ @roadfromroi ⬅
//  ↗ ⬆ ⬆ ⬆ ⬆ ⬆ ↖
#include <iostream>
#include "vector"
#include "algorithm"
#include "numeric"
#include "climits"
#include "iomanip"
#include "bitset"
#include "cmath"
#include "map"
#include "deque"
#include <unistd.h>
#include "array"
#include "set"
#define all(x) x.begin(), x.end()
using namespace std;
/* This is sample grader for the contestant getDistance*/
#include "rail.h"
int getdst(int frst, int x, int fromleft, set<pair<int, int>> &lftcnt, set<pair<int, int>> &rgtcnt) {
    if (fromleft) {
        if (frst <= x) {
            return x - frst;
        } else {
            auto it1 = lftcnt.lower_bound({frst, 0});
            if (it1 == lftcnt.end())
                return -1;
            pair<int, int> pos = *it1;
            int res = pos.first - frst;
            auto it2 = rgtcnt.lower_bound({x-1, 100001});
            if (it2 == rgtcnt.begin())
                return -1;
            pair<int, int> pos2 = *(--it2);
            res += pos.first - pos2.first;
            res += x - pos2.first;
            return res;
        }
    } else {
        auto it1 = lftcnt.lower_bound({x+1, 0});
        if (it1 == lftcnt.end())
            return -1;
        pair<int, int> pos = *it1;
        int res = pos.first - frst + pos.first - x;
        return res;
    }
}
int getdst2(int frst, int x, set<pair<int, int>> &lftcnt, set<pair<int, int>> &rgtcnt) {
    auto it1 = rgtcnt.lower_bound({x+1, 0});
    if (it1 == rgtcnt.begin())
        return -1;
    pair<int, int> pos = *(--it1);
    int res = - pos.first + frst - pos.first + x;
    return res;
}
void findLocation(int n, int first, int location[], int stype[]) {
    location[0] = first;
    stype[0] = 1;
    vector<pair<int, int>> resba;
    for (int i = 1; i < n; ++i) {
        resba.push_back({getDistance(0, i), i});
    }
    sort(all(resba));
    set<pair<int, int>> lftcnt, rgtcnt;
    for (auto i : resba) {
        if (lftcnt.empty()) {
            lftcnt.insert({i.first + first, i.second});
            location[i.second] = i.first + first;
            stype[i.second] = 2;
        } else {
           // cout << i.first << ' ' << i.second << '\n';
          //  cout << -v2 + lftcnt.rbegin()->first << '\n';
            int v2 = getDistance(lftcnt.rbegin()->second, i.second);
            if (!rgtcnt.empty()) {
                int v3 = getDistance(rgtcnt.begin()->second, i.second);
                //  cout << v2 + rgtcnt.begin()->first << '\n';
                if (v3 + rgtcnt.begin()->first < first) {
                    if (getdst(first, v3 + rgtcnt.begin()->first, 1, lftcnt, rgtcnt) == i.first and getdst2(lftcnt.rbegin()->first, v3 + rgtcnt.begin()->first, lftcnt, rgtcnt) == v2) {
                        // cout << "Yes\n";
                        lftcnt.insert({v3 + rgtcnt.begin()->first, i.second});
                        location[i.second] = v3 + rgtcnt.begin()->first;
                        stype[i.second] = 2;
                        continue;
                    }
                }
                //cout << "No\n";
            }
            if (getdst(first, -v2 + lftcnt.rbegin()->first, 0, lftcnt, rgtcnt) == i.first) {
          //      cout << "Yes\n";
                rgtcnt.insert({-v2 + lftcnt.rbegin()->first, i.second});
                location[i.second] = -v2 + lftcnt.rbegin()->first;
                stype[i.second] = 1;
                continue;
            }
          //  cout << "No\n";
            lftcnt.insert({i.first + first, i.second});
            location[i.second] = i.first + first;
            stype[i.second] = 2;
        }
    }
}
/*
typedef struct Station {
    int index;
    int type;
    int location;
    int L,R;
}STATION;
long long cnt;
static int S,SUBTASK;
static STATION stations[10004];

int cmp_fun_1(const void *a,const void *b)
{
    STATION c,d;
    c = *(STATION*)(a);
    d = *(STATION*)(b);
    return c.location < d.location ? -1 : 1;
}

int cmp_fun_2(const void *a,const void *b)
{
    STATION c,d;
    c = *(STATION*)(a);
    d = *(STATION*)(b);
    return c.index < d.index ? -1 : 1;
}

void now_I_want_to_getLR(){
    int now = stations[S-1].index,i;
    for(i=S-2;i>=0;i--){
        stations[i].R = now;
        if(stations[i].type==2)	now = stations[i].index;
    }
    now = stations[0].index;
    for(i=1;i<S;i++){
        stations[i].L = now;
        if(stations[i].type==1)	now = stations[i].index;
    }
}

int getDistance(int x,int y)
{
    cnt++;
    if(x==y)	return 0;
    if(x<0 || x>=S || y<0 || y>=S)    return -1;
    if(stations[x].location > stations[y].location){
        int tmp = x;
        x = y;
        y = tmp;
    }
    int ret = 0;
    if(stations[x].type==1 && stations[y].type==1){
        ret = stations[stations[y].R].location-stations[x].location+stations[stations[y].R].location-stations[y].location;
    }else if(stations[x].type==1 && stations[y].type==2){
        ret = stations[y].location-stations[x].location;
    }else if(stations[x].type==2 && stations[y].type==2){
        ret = stations[x].location-stations[stations[x].L].location+stations[y].location-stations[stations[x].L].location;
    }else if(stations[x].type==2 && stations[y].type==1){
        ret = stations[x].location-stations[stations[x].L].location+stations[stations[y].R].location
              -stations[stations[x].L].location+stations[stations[y].R].location-stations[y].location;
    }
    return ret;
}


void getInput()
{
    int g;
    g = scanf("%d",&SUBTASK);
    g = scanf("%d",&S);
    int s;
    for (s = 0; s < S; s++) {
        int type, location;
        g = scanf(" %d %d",&type,&location);
        stations[s].index = s;
        stations[s].location = location;
        stations[s].type = type;
        stations[s].L = -1;
        stations[s].R = -1;
    }
    qsort(stations, S, sizeof(STATION), cmp_fun_1);
    now_I_want_to_getLR();
    qsort(stations, S, sizeof(STATION), cmp_fun_2);
}

int serverGetStationNumber()
{
    return S;
}

int serverGetSubtaskNumber()
{
    return SUBTASK;
}

int serverGetFirstStationLocation()
{
    return stations[0].location;
}

int main()
{
    int i;
    getInput();
    cnt = 0;

    int location[10005];
    int type[10005];
    int ok = 1;
    findLocation(S, serverGetFirstStationLocation(),location, type);
    if(SUBTASK==3 && cnt>S*(S-1))	ok = 0;
    if(SUBTASK==4 && cnt>3*(S-1))	ok = 0;


    for (i = 0; i < S; i++)
        if(type[i]!=stations[i].type || location[i]!=stations[i].location)
            ok = 0;
    if(ok==0)	printf("Incorrect");
    else	printf("Correct");
    return 0;
}
*/

Details

answer.code:20:10: fatal error: rail.h: No such file or directory
   20 | #include "rail.h"
      |          ^~~~~~~~
compilation terminated.