• Codeforces Round #575 (Div. 3) E. Connected Component on a Chessboard


    传送门

    题意:

    给你一个黑白相间的1e9*1e9的棋盘,你需要从里面找出来由b个黑色的格子和w个白色的格子组成的连通器(就是你找出来的b+w个格子要连接在一起,不需要成环)。问你可不可以找出来,如果可以就先打印YES,再打印出所有格子的坐标,否则打印出NO。

    题解:

    参考博客

    如果b和w相等的时候,那么就可以用棋盘的一行来表示。

    对于不相等的情况:

    如果max(w,b)>min(w,b)*3+1那么这样是找出不来符合条件的连通区域的。

    看图中的红色部分你会知道只有这样十十的连接起来才是最大构成情况(这样写代码其实并不麻烦,你不需要一个十一个十的来拼接,可以看一下代码)

    就这个十十的拼接可以就是一个十一个十的先拼接,之后多余出来的颜色格子,就用bfs添加到十的周围,但是代码确实太麻烦了

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<map>
     6 #include<math.h>
     7 using namespace std;
     8 typedef long long ll;
     9 const int maxn=1e5+5;
    10 const int mod=26;
    11 const int INF=0x3f3f3f3f;
    12 const int block=300;
    13 int cnt1=0,cnt2=0;
    14 int main()
    15 {
    16     int t;
    17     scanf("%d",&t);
    18     while(t--)
    19     {
    20         int w,b;
    21         scanf("%d%d",&b,&w);//b黑色  w白色
    22         if(max(w,b)>min(w,b)*3+1)
    23         {
    24             printf("NO
    ");
    25             continue;
    26         }
    27         if(w==b)
    28         {
    29             printf("YES
    ");
    30             for(int i=3; i<=w+b+2; ++i)
    31                 printf("5 %d
    ",i);
    32         }
    33         else if(b<w)
    34         {
    35             printf("YES
    ");
    36             w=w-b-1;//将在一行的减掉
    37             for(int i=4; i<=b*2+4; i++)
    38             {
    39                 printf("4 %d
    ",i);
    40                 if(w>0 && i&1)
    41                 {
    42                     printf("3 %d
    ",i);
    43                     w--;
    44                 }
    45                 if(w>0  && i&1 )
    46                 {
    47                     printf("5 %d
    ",i);
    48                     w--;
    49                 }
    50             }
    51         }
    52         else if(b>w)
    53         {
    54             swap(b,w);
    55             printf("YES
    ");
    56             w=w-b-1;//将在一行的减掉,再对这一行的某些部分添加格子变成十
    57             for(int i=4; i<=b*2+4; i++)
    58             {
    59                 printf("3 %d
    ",i);
    60                 if(w>0 && i&1)
    61                 {
    62                     printf("2 %d
    ",i);
    63                     w--;
    64                 }
    65                 if(w>0  && i&1 )
    66                 {
    67                     printf("4 %d
    ",i);
    68                     w--;
    69                 }
    70             }
    71         }
    72     }
    73     return 0;
    74 }
    View Code
  • 相关阅读:
    计算机网络杂烩
    网络体系、网络模型其他
    数据通信(系统)的物理要素
    数据通信历史
    没有备案的网站域名能解析吗
    dedecms列表页有图调用缩略图无图留空的方法
    dede 你所上传的软件类型不在许可列表,请更改系统对扩展名限定的配置
    跟版网 > 织梦教程 > 织梦安装使用 > 织梦DedeCMS附件上传大
    从#65279字符看dede模板页面编码问题
    sublime text如何保存为uft-8无bom编码格式文件
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/11532175.html
Copyright © 2020-2023  润新知