• codeforces 980B Marlin


    题意:

    有一个城市有4行n列,n是奇数,有一个村庄在(1,1),村民的活动地点是(4,n);

    有一个村庄在(4,1),村民的活动地点是(1,n);

    现在要修建k个宾馆,不能修建在边界上,问能否给出一种安排方案使得两个村庄的村民到他们各自的活动地点的最短路的条数相等。

    思路:

    画了几个实例就应该知道,无论n和k是多少,都可以构建出合理的方案,所以全是YES。

    如果k为偶数,那么就上下对称,这个比较好构造;当k为奇数,我采用的是首先把第二排从中间开始向两边填满,然后第三排则是从中间一格的两边开始填。

    忽略了k为0的情况,导致n发wa和n发rte,惨!

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <string>
     4 #include <iostream>
     5 using namespace std;
     6 string a[4];
     7 int main()
     8 {
     9     int n,k;
    10     scanf("%d%d",&n,&k);
    11     puts("YES");
    12     for (int i = 0;i < 4;i++)
    13     {
    14         for (int j = 0;j < n;j++) a[i].push_back('.');
    15     }
    16     if (k % 2 == 0)
    17     {
    18         int c = 1;
    19         int l = 1;
    20         while (1)
    21         {
    22             if (k <= 0) break;
    23             a[c][l] = '#';
    24             c++;
    25             k--;
    26             if (k <= 0) break;
    27             if (c >= 3)
    28             {
    29                 c = 1;
    30                 l++;
    31             }
    32         }
    33     }
    34     else
    35     {
    36         int l = n / 2,r = n / 2;
    37         int c = 1;
    38         while (1)
    39         {
    40             if (k <= 0) break;
    41             a[c][l] = a[c][r] = '#';
    42             if (l == r) k--;
    43             else k-= 2;
    44             if (k <= 0) break;
    45             l--,r++;
    46             if (l <= 0) break;
    47         }
    48         l =  n / 2 - 1,r = n / 2 + 1;
    49         c = 2;
    50         while (1)
    51         {
    52             if (k <= 0) break;
    53             a[c][l] = a[c][r] = '#';
    54             k -= 2;
    55             l--,r++;
    56         }
    57     }
    58     for (int i = 0;i < 4;i++) cout << a[i] << endl;
    59     return 0;
    60 }
  • 相关阅读:
    安装python软件出错,解决办法
    vt100
    Navicat 字符集 排序规则设置
    linux 查看进程 ps aux | grep init
    一、网络编程-UDP传输协议及socket套接字使用
    二、飞机大战终极版-巩固面向对象设计项目的思想
    一、利用Python编写飞机大战游戏-面向对象设计思想
    八、递归编程技巧
    七、面向对象之单例设计模式
    六、面向对象之单继承、多继承、重写
  • 原文地址:https://www.cnblogs.com/kickit/p/9012058.html
Copyright © 2020-2023  润新知