銆怳OJ 888銆戝洓杞溅

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了銆怳OJ 888銆戝洓杞溅相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/col' title='col'>col   typedef   ring   style   else   type   algo   瑕佹眰   鏂规   

鍥涜疆杞?car

##銆愰鐩弿杩般€戯細

鍦ㄥ湴鍥句笂鏁h惤鐫€ n 涓溅杞紝灏?J 鎯崇敤瀹冧滑閫犱竴杈嗚溅銆傝姹傚涓嬶細

1. 涓€杈嗚溅闇€瑕佸洓涓溅杞紝涓斿洓涓溅杞瀯鎴愪竴涓鏂瑰舰

2. 杞﹁疆涓嶈兘绉诲姩

浣犻渶瑕佽绠楁湁澶氬皯绉嶉€犺溅鐨勬柟妗堬紙涓や釜鏂规涓嶅悓褰撲笖浠呭綋鎵€鐢ㄨ溅杞笉鍏ㄧ浉鍚岋紝鍧愭爣鐩稿悓鐨勪袱涓溅杞涓轰笉鍚岃溅杞級銆?/p>

 

##銆愯緭鍏ユ弿杩般€戯細

绗竴琛屼竴涓暣鏁?n

鎺ヤ笅鏉 琛岋紝姣忚涓や釜鏁存暟 x y锛岃〃绀哄湪(x,y)澶勬湁涓€涓溅杞?/p>

 

##銆愯緭鍑烘弿杩般€戯細

涓€琛屼竴涓暣鏁帮紝琛ㄧず鏂规鏁?/p>

 

##銆愭牱渚嬭緭鍏ャ€戯細

    9

    0 0

    1 0

    2 0

    0 2

    1 2

    2 2

    0 1

    1 1

    2 1

 

##銆愭牱渚嬭緭鍑恒€戯細

    5

 

##銆愭椂闂撮檺鍒躲€佹暟鎹寖鍥村強鎻忚堪銆戯細

鏃堕棿锛?s 绌洪棿锛?28M

30%鐨勬暟鎹繚璇?n<=30

100%鐨勬暟鎹繚璇?1 <= n <= 1000; |x|, |y| < 20000

 

棰樿В锛氭毚鍔?浜屽垎鈭?/p>

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int n,m,cnt;
struct node{
    int x,y,z;
}b[1002]; 
node a[1002];
bool cmp(node p,node q){
    if(p.x==q.x) return p.y<q.y;
    return p.x<q.x;
}

int find(int xx,int yy,int l1,int r1){
    int l=l1,r=r1;
    while(l<=r){
        int m=(l+r)/2;
        if(b[m].x<xx || (b[m].x==xx && b[m].y<yy)) l=m+1;
        if(b[m].x>xx || (b[m].x==xx && b[m].y>yy)) r=m-1;
        if(b[m].x==xx && b[m].y==yy) return 1;
    }
    return 0;
}

ll overcome_jjj(int p,int q){
    int a1=b[p].x; int b1=b[p].y;
    int a2=b[q].x; int b2=b[q].y;
    if((a2-a1)!=(b2-b1)) return 0;
    int f1x=a2; int f1y=b1;
    int f2x=a1; int f2y=b2; 
    if(find(f1x,f1y,p,q) && find(f2x,f2y,p,q)) 
    {
        //printf("%d %d %d %d
",a1,b1,a2,b2);
        //printf("%d %d %d %d
",f1x,f1y,f2x,f2y);
        //printf("%d
",b[p].z*b[q].z);printf("
");
        return (ll)b[p].z*(ll)b[q].z;
    }
       
    return 0;
}

int main(){
    freopen("car.in","r",stdin);
    freopen("car.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d %d",&a[i].x,&a[i].y);
    sort(a+1,a+n+1,cmp);
    b[1].x=a[1].x; b[1].z=1; 
    b[1].y=a[1].y; cnt=1;
    for(int i=2;i<=n;i++){
        if(a[i].x==a[i-1].x && a[i].y==a[i-1].y) 
           b[cnt].z++;
        else { b[++cnt].x=a[i].x; b[cnt].y=a[i].y; b[cnt].z=1; }
    } 
    ll ans=0;
    for(int i=1;i<=cnt;i++)
        for(int j=i+1;j<=cnt;j++)
            ans+=overcome_jjj(i,j);
    printf("%lld",ans);
    return 0;
}

 

以上是关于銆怳OJ 888銆戝洓杞溅的主要内容,如果未能解决你的问题,请参考以下文章

UOJ#209. 銆怳ER #6銆戠エ鏁扮粺璁?缁勫悎+瀹规枼

UOJ310. 銆怳NR #2銆戦粠鏄庡墠鐨勫阀鍏嬪姏 [FWT]

銆怭ython鏈哄櫒瀛︿範銆戝喅绛栨爲鍒嗙被

銆怉sphyre寮曟搸銆戝彂甯冧簡鏂扮増鏈琕101

銆怢eetCode銆戝姩鎬佽鍒掞紙涓嬬瘒鍏?9棰橈級

銆恘pm銆戝畨瑁呫€佹惌寤虹嫭绔嬮」鐩幆澧?񵩨