zoukankan      html  css  js  c++  java
  • Kenken Race

     题面:

    有N个方块排成一排,从左到右编号为1,2,...,N。给你一个长度为N的字符串S. 和#。如果S的第i个字符是'#',则Square i包含一块岩石; 如果S的第i个字符是'.',则Square i是空的。一开始,Snuke站在Square A上,Fnuke站在Square B上。

    你可以多次重复以下操作:

    选择Snuke或Fnuke,让他向右跳一两个方块。目的地必须是其中一个方格,并且不得包含岩石或其他人。
    你想重复这个操作,以便Snuke将站在Square C上,Fnuke将站在Square D上。
    确定这是否可行。

     坑点:

    处理c>d的情况

     思路:

    首先, A 到 C中与 B 到 D中不能存在连续的两个障碍物。

    其次,若 D<C ,需要额外满足 B到 D中存在至少一个空位两侧均为空位。

    时间复杂度 O(N)。

     代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3  
     4 char s[300000];
     5 int n,a,b,c,d,f;
     6  
     7 int main() {
     8     scanf("%d%d%d%d%d", &n, &a, &b, &c, &d);
     9     scanf("%s", s + 1);
    10     for (int i = c; i < d; i++) {
    11         if (s[i] == '#' && s[i + 1] == '#') {
    12             printf("No
    ");
    13             return 0;
    14         }
    15     }
    16     for (int i = a; i < c; i++) {
    17         if (s[i] == '#' && s[i + 1] =='#') {
    18             printf("No
    ");
    19             return 0;
    20         }
    21     }
    22     if (d < c) {
    23         for (int i = b; i <= d; i++) {
    24             if (s[i - 1] == '.' && s[i] == '.' && s[i + 1] == '.') {
    25                 f = 1;
    26                 break;
    27             }
    28         }
    29         if (f) {
    30             printf("Yes
    ");
    31         } else {
    32             printf("No
    ");
    33         }
    34         return 0;
    35     }
    36     printf("Yes
    ");
    37 }
    View Code

     

  • 相关阅读:
    [转]Asp.Net 备份和恢复SQL SERVER 数据库
    alert 的封装
    using(sqlConnection conn=new sqlConnection) 中using的作用
    dotnet 上传大文件的配置的方法
    allowDefinition='MachineToApplication'
    转 Server Application Error报错信息的解决方案
    url 自动加入链接
    MVC中使用RadioButtonFor
    linux iptables squid 透明代理
    linux iptables网关配置,端口转发
  • 原文地址:https://www.cnblogs.com/Accpted/p/11185659.html
Copyright © 2011-2022 走看看