QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#121418 | #1148. Game | somethingnew# | Compile Error | / | / | C++20 | 6.7kb | 2023-07-08 04:31:48 | 2024-07-04 00:30:08 |
Judging History
你现在查看的是最新测评结果
- [2024-07-04 00:30:08]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [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.