zoukankan      html  css  js  c++  java
  • 2017 计蒜之道 初赛 第一场 A 阿里的新游戏

    题链:https://nanti.jisuanke.com/t/15499

    这题观察图纸可知成三线段上的相邻点之间的距离有1,2,3三种情况的,同时要成线段必然是同横坐标或者纵坐标,然后我们排除掉穿过0的特殊案例(例如:-1,1,3)就可以啦。

    #include <queue>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #define ll long long
    #define inf 1000000000000000LL
    #define mod 1000000007
    using namespace std;
    int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*f;
    }
    const int N=100;
    struct node{
        int x,y;
    }a[N];
    bool check(int i,int j,int k){
         int flag=0;
        if(a[i].x==a[j].x&&a[j].x==a[k].x) flag=1;
        if(a[i].y==a[j].y&&a[j].y==a[k].y) flag=2;
        if(!flag) return false;
        int s[3],ss[3];
        if(flag==1){
            ss[0]=a[i].y;
            ss[1]=a[j].y;
            ss[2]=a[k].y;
            s[0]=abs(a[i].y-a[j].y);
            s[1]=abs(a[j].y-a[k].y);
            s[2]=abs(a[i].y-a[k].y);
        }
        if(flag==2){
            ss[0]=a[i].x;
            ss[1]=a[j].x;
            ss[2]=a[k].x;
            s[0]=abs(a[i].x-a[j].x);
            s[1]=abs(a[j].x-a[k].x);
            s[2]=abs(a[i].x-a[k].x);
        }
        sort(s,s+3);
        sort(ss,ss+3);
        if(ss[0]==-1&&ss[1]==1&&ss[2]==3) return false;
        if(ss[1]==-1&&ss[2]==1&&ss[0]==-3) return false;
        if(s[0]==1&&s[1]==1&&s[2]==2) return true;
        if(s[0]==2&&s[1]==2&&s[2]==4) return true;
        if(s[0]==3&&s[1]==3&&s[2]==6) return true;
        return false;
    }
    int main(){
         int n=read(),m=read();
         int u,v;
         for(int i=0;i<n;i++){
             a[i].x=read();a[i].y=read();
         }
         for(int i=0;i<m;i++) u=read(),v=read();
         int ans=0;
         for(int i=0;i<n;i++){
             for(int j=i+1;j<n;j++){
                for(int k=j+1;k<n;k++){
                    if(check(i,j,k)) ans++;
                }
             }
         }
         printf("%d
    ",ans);
         return 0;
    }
    
    
  • 相关阅读:
    [二叉查找树] 1115. Counting Nodes in a BST (30)
    [最小生成树] 继续畅通工程
    [最小生成树] 畅通工程
    [最小生成树] 还是畅通工程
    [图算法] 1030. Travel Plan (30)
    [图算法] 1003. Emergency (25)
    [并查集] More is Better
    [并查集] How Many Tables
    [并查集] 畅通工程
    [并查集] 通信系统
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6883228.html
Copyright © 2011-2022 走看看