zoukankan      html  css  js  c++  java
  • C. Connect Three(构造)

    题目链接:http://codeforces.com/contest/1087/problem/C

    题目大意:给你三个点的坐标,让你用尽可能少的方块,让这三个点连起来。

    具体思路: 我们先对这三个点进行排序,我们先选定第二个点,记录一下所有的点中,y的最小和最大,对于第二个点,我们竖着建立一个长度为(y的最大值-y的最小值+1)的长度,这一条的x坐标是第二个点的x坐标,然后剩下的第一个点和第三个点直接连向这个条就可以了。

    AC代码:

     1 #include <iostream>
     2 #include <string>
     3 #include <deque>
     4 #include <stack>
     5 #include<cmath>
     6 #include <algorithm>
     7 #include<map>
     8 using namespace std;
     9 # define ll long long
    10 # define inf 0x3f3f3f3f
    11 vector<pair<int,int> >vis;
    12 map<pair<int,int>,bool>ju;
    13 struct node
    14 {
    15     int x;
    16     int y;
    17 } q[20];
    18 bool cmp(node t1,node t2)
    19 {
    20     if(t1.x==t2.x)
    21         return t1.y<t2.y;
    22     return t1.x<t2.x;
    23 }
    24 int main()
    25 {
    26     int x1,y1,x2,y2,x3,y3;
    27     cin>>x1>>y1;
    28     cin>>x2>>y2;
    29     cin>>x3>>y3;
    30     int miny=inf,maxy=0;
    31     miny=min(miny,y1);
    32     miny=min(miny,y2);
    33     miny=min(miny,y3);
    34     maxy=max(maxy,y1);
    35     maxy=max(maxy,y2);
    36     maxy=max(maxy,y3);
    37     int num=3;
    38     q[1].x=x1;
    39     q[1].y=y1;
    40     q[2].x=x2;
    41     q[2].y=y2;
    42     q[3].x=x3;
    43     q[3].y=y3;
    44     sort(q+1,q+4,cmp);
    45     for(int i=miny; i<=maxy; i++)
    46     {
    47         if(ju[make_pair(q[2].x,i)]==0)
    48             vis.push_back(make_pair(q[2].x,i));
    49         ju[make_pair(q[2].x,i)]=1;
    50         // cout<<q[2].x<<" "<<i<<endl;
    51     }
    52     for(int i=q[1].x; i<=q[2].x; i++)
    53     {
    54       //  cout<<i<<" "<<q[1].y<<endl;
    55         if(ju[make_pair(i,q[1].y)]==0)
    56         vis.push_back(make_pair(i,q[1].y));
    57          ju[make_pair(i,q[1].y)]=1;
    58     }
    59     for(int i=q[2].x; i<=q[3].x; i++)
    60     {
    61          if(ju[make_pair(i,q[3].y)]==0)
    62         vis.push_back(make_pair(i,q[3].y));
    63          ju[make_pair(i,q[3].y)]=1;
    64        // cout<<i<<" "<<q[3].y<<endl;
    65     }
    66     cout<<vis.size()<<endl;
    67     for(auto i:vis)
    68     {
    69         cout<<i.first<<" "<<i.second<<endl;
    70     }
    71 //    for(int i=0; i<=1000; i++)
    72 //    {
    73 //        for(int j=0; j<=1000; j++)
    74 //        {
    75 //            if(vis[make_pair(i,j)]==0)
    76 //                continue;
    77 //            cout<<i<<" "<<j<<endl;
    78 //        }
    79 //    }
    80     return 0;
    81 }
  • 相关阅读:
    [转+]C语言复杂声明
    c和c++数组初始化一点小区别
    [转]Linux ftp命令的使用方法
    Ubuntu 12.04 英文版中文输入法设置
    [转]Android手机中获取手机号码和运营商信息
    把google地圖放在Crm Entity中
    为什么报表里面记录的创建时间 比我们电脑客户端的世界时间 隔8个小时?这个是什么原因?
    print style Iframe
    取出MSCRM父窗口的欄位的值
    Display Fetch in IFRAME – Part 2
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262759.html
Copyright © 2011-2022 走看看