社区讨论
求问编译器
学术版参与者 5已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mhjhpd7v
- 此快照首次捕获于
- 2025/11/04 02:45 4 个月前
- 此快照最后确认于
- 2025/11/04 02:45 4 个月前
rt,在模拟赛考场上写了份代码。在本地和Linux评测机上过了编,在Lemon上就CE。请问是为什么?(均为C++17 O2)
CPP#include <bits/stdc++.h>
using namespace std;
#define debug cerr<<"The code runs successfully.\n";
#define endl '\n'
#define TRACE 1
#define tcout TRACE && cout
#define fst ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define int long long
#define fir first
#define sec second
const int P = 998244353;
const int Base = 33331;
#ifdef int
const int INF = 0x3f3f3f3f3f3f3f3f;
#else
const int INF = 0x3f3f3f3f;
#endif
const int N = 2e5 + 10, M = 1e6 + 10;
struct point {
pair<int,int> x;
int num;
}a[N];
vector<pair<int,int>> g[N];
int x,y;
int n,ans1,ans2,dist[N];
bool vis[N];
bool cmp1(point x,point y) {
return x.x<y.x;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
bool cmp2(point x,point y) {
pair<int,int> ccf1=x.x,ccf2=y.x;
swap(ccf1.fir,ccf1.sec);
swap(ccf2.fir,ccf2.sec);
return ccf1<ccf2;
}
signed main() {
freopen("Travel.in","r",stdin);
freopen("Travel.out","w",stdout);
fst;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>a[i].x.fir>>a[i].x.sec;
a[i].num=i;
dist[i]=INF;
}
sort(a+1,a+1+n,cmp1);
for(int i=1;i<n;i++) {
g[a[i].num].push_back({a[i+1].num,min(abs(a[i].x.fir-a[i+1].x.fir),abs(a[i].x.sec-a[i+1].x.sec))});
g[a[i+1].num].push_back({a[i].num,min(abs(a[i].x.fir-a[i+1].x.fir),abs(a[i].x.sec-a[i+1].x.sec))});
}
sort(a+1,a+1+n,cmp2);
for(int i=1;i<n;i++) {
g[a[i].num].push_back({a[i+1].num,min(abs(a[i].x.fir-a[i+1].x.fir),abs(a[i].x.sec-a[i+1].x.sec))});
g[a[i+1].num].push_back({a[i].num,min(abs(a[i].x.fir-a[i+1].x.fir),abs(a[i].x.sec-a[i+1].x.sec))});
}
dist[1]=0;
q.push({0,1});
while(!q.empty()) {
int u=q.top().sec;
q.pop();
if(vis[u]) continue;
vis[u]=1;
for(auto [v,w]:g[u]) {
if(dist[v]>dist[u]+w) {
dist[v]=dist[u]+w;
q.push({dist[v],v});
}
}
}
cout<<dist[n]<<endl;
return 0;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...