Intersection(ZOJ3862)

本文探讨了一种解决特定交换问题的算法优化方法,通过减少交换次数来提高效率。详细介绍了问题背景、核心思路及代码实现,适用于需要优化交换操作的场景。

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5474

一开始自己写的wa了。因为所有的答案只要换的合理,不过多操作总是可以有答案的。但是当时交换次数过多导致wa了。然后就不知道怎么省略。

而且这道题的交换让人思路混乱。简直不要太痛苦。

后来参考了队员的代码,思路是类似的但是,她就是能对。swap()操作省了很多代码量。

参考:http://blog.youkuaiyun.com/loy_184548/article/details/50967627

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int x,y,id;
} a[200005];

map<int,int> mp;

bool cmp(node a,node b)
{
    if(a.x!=b.x)
        return a.x<b.x;
    return a.y<b.y;
}

int anslist[200005];

int pos[200005];

int T;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        memset(anslist,0,sizeof(anslist));
        memset(pos,0,sizeof(pos));
        mp.clear();
        int n;
        scanf("%d",&n);
        for(int i=0; i<2*n; i++)
        {
            scanf("%d%d",&a[i].x,&a[i].y);
            a[i].id=i+1;
        }
        for(int i=0; i<n; i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            mp[x]=y;
            mp[y]=x;
        }

        sort(a,a+2*n,cmp);

        int cnt=0;
        int ans=0;
        for(int i=0; i<2*n; i++)
            pos[a[i].id]=i;

        for(int i=0; i<2*n; i+=2)
        {
            int u=a[i].id;
            int v=a[i+1].id;
            if(mp[u]==v)continue;

            int u_con=mp[u];
            anslist[cnt++]=v;
            anslist[cnt++]=u_con;
            swap(a[i+1].id,a[pos[u_con]].id);
            ans++;
            swap(pos[v],pos[u_con]);
        }
        printf("%d\n",ans);
        for(int i=0; i<cnt; i+=2)
            printf("%d %d\n",anslist[i],anslist[i+1]);
    }
    return 0;
}

Intersection 是一个通用术语,在编程和数据结构中通常指的是两个或更多集合共有的元素。在不同的上下文中,intersection 可以有不同的实现方式和技术应用。 ### 编程中的交集 当提到编程中的 intersection 时,这可能涉及到如何找出两个列表、数组或者更复杂的数据结构中共有的元素。例如,在 Python 中可以使用内置的 set 数据类型来轻松地找到两个集合的交集: ```python set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} common_elements = set1.intersection(set2) # 结果是 {3, 4} ``` 对于更加复杂的场景,比如处理大规模的地图数据相交点,可能会用到专门优化过的算法或是并行编程技术来加速计算过程。有一种方法被提及能够将大型地图相交点的生成速度提升至原来的20-30倍,从而大大减少了原本需要一天左右才能完成的任务时间。 ### 数据结构中的交集 在数据结构方面,intersection 主要是指定两种不同类型的结构之间共同拥有的成员。例如,在图论中,节点间的公共邻居也可以被视为一种形式上的交集;而在数据库查询语句 SQL 中,则可以通过 INNER JOIN 操作符获取表之间的交集记录。 此外,“交集”的概念也出现在图形渲染领域内的 Ray-Box Intersection 算法里,用于确定光线是否与给定的空间体发生碰撞,这对于计算机视觉以及图像重建等领域非常重要。 综上所述,intersection 在编程及数据结构中有多种表现形式,并且针对特定的应用场景有着相应的高效解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值