CF1506 F. Triangular Paths

Problem - 1506F - Codeforces

 

重点:

给出的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);
    }
}

 

posted @ 2021-11-06 20:36  TRTTG  阅读(67)  评论(0编辑  收藏  举报