码迷,mamicode.com
首页 > 其他好文 > 详细

The Preliminary Contest for ICPC Asia Xuzhou 2019

时间:2019-09-08 00:35:08      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:http   anti   put   自己   its   img   nan   val   +=   

B题:https://nanti.jisuanke.com/t/41384

题意:俩操作,1操作:讲位置为x视为无效。2操作:询问以x位置为起点向后最近的有效位置。(起初全都有效)

分析:离散化+并查集,当一个位置无效时,2操作对他的询问就变成他的祖先,即找最近有效(找祖先)

技术图片
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+6;
int tot,f[M<<2],lisan[M<<2],op[M],val[M];
int find(int x){
    return x==f[x]?x:f[x]=find(f[x]);
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d%d",&op[i],&val[i]);
        lisan[++tot]=val[i];//保证离散化后相邻之间仍具有相邻性 
        lisan[++tot]=val[i]+1;
    }
    sort(lisan+1,lisan+1+tot);
    tot=unique(lisan+1,lisan+1+tot)-(lisan+1);
    for(int i=0;i<=tot;i++)
        f[i]=i;
    for(int i=1;i<=m;i++){
        if(op[i]==1){
            int fu=lower_bound(lisan+1,lisan+1+tot,val[i])-(lisan);
            int fv=lower_bound(lisan+1,lisan+1+tot,val[i]+1)-(lisan);
            f[find(fu)]=find(fv);
        }
        else{
            int fu=lower_bound(lisan+1,lisan+1+tot,val[i])-(lisan);
            int t=find(fu);
            if(lisan[t]>n)
                puts("-1");
            else
                printf("%d\n",lisan[t]);
        }
    }
    return 0;
}
View Code

K题:https://nanti.jisuanke.com/t/41393

题意:在二维坐标内给定一些点,设点P为(Xc,Yc),对于每一个坐标要求一定要有和其他坐标(包括他自己)连线的中心点为P,若没有就添加上去,问最小添加次数(点P由能达到最小的方向去定,且点P在这个坐标内存不存在无所谓)

分析:找每每俩个点配对形成的中心点数方案数,对于每一个方案点P唯一,然后求那个方案含有的点多,那么答案就是n-(这个方案含有的点数)

   细节:可能有重复的点,若要添加,就只要1和就行,所以事先经行去重后面好操作

技术图片
#include<bits/stdc++.h>
using namespace std;
const int M=1e3+3;

struct node{
    int x,y;
    bool operator < (const node & b)const{
        if(x==b.x)
            return y<b.y;
        return x<b.x;
    }
    bool operator ==(const node & p)const {
        return x==p.x && y==p.y;
    }
}a[M];
map<node,int>mp;
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i].x,&a[i].y);
    }
    sort(a+1,a+1+n);
    n=unique(a+1,a+1+n)-(a+1);
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j++){
            if(i==j){
                mp[{a[i].x+a[j].x,a[i].y+a[j].y}]++;
            }
            else{
                mp[{a[i].x+a[j].x,a[i].y+a[j].y}]+=2;
            }
        }
    }
    int ans=n;
    map<node,int>::iterator it;
    for(it=mp.begin();it!=mp.end();it++){
        ans=min(ans,n-(it->second));
    }
    printf("%d\n",ans);
    return 0;
}
View Code

 

The Preliminary Contest for ICPC Asia Xuzhou 2019

标签:http   anti   put   自己   its   img   nan   val   +=   

原文地址:https://www.cnblogs.com/starve/p/11483884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!