重点:
给出的n个点保证存在一条路径能同时经过给出的n个点
这位大佬的题解图文并茂
Codeforces 1506F - Triangular Paths - StelaYuri - 博客园 (cnblogs.com)
#include<bits/stdc++.h> using namespace std; struct node { int r,c; }e[200005]; bool cmp(node p,node q) { return p.r<q.r; } int main() { int T,n,x,y; long long ans; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&e[i].r); for(int i=1;i<=n;++i) scanf("%d",&e[i].c); sort(e+1,e+n+1,cmp); e[0].r=e[0].c=1; ans=0; for(int i=1;i<=n;++i) { if(e[i].r-e[i].c==e[i-1].r-e[i-1].c) { if(!(e[i].r-e[i].c&1)) ans+=e[i].r-e[i-1].r; } else { x=e[i-1].r-e[i-1].c>>1; y=e[i].r-e[i].c>>1; ans+=y-x; } } printf("%lld\n",ans); } }