zoukankan      html  css  js  c++  java
  • B. A Tide of Riverscape

     

    http://codeforces.com/contest/989/problem/B

     

    思路还是从模拟开始。设前p个字符为p串,遍历p串的所有情况,然后对于剩下的字符,检查是否满足题目要求

    1、p串有2^2000种可能,数组保存不下所有情况,于是考虑深搜,也就是遇到'.',直接假设为0考虑下一个,不行的话函数返回考虑'1'

    2、对于例子2,我们发现p的长度可以更短,当p很大,如n=2000,p=1500,p里就会出现很多并不影响结果但又需要深搜的字符,事实上,只有前min=Math.min(n-p,p)个字符是有检查机会的

     

     1 public class Main {
     2     static int n, p, min,find;
     3     static String s;
     4 
     5     public static void main(String[] args) {
     6         Scanner io = new Scanner(System.in);
     7 
     8         n = io.nextInt();
     9         p = io.nextInt();
    10         s = io.nextLine();
    11         while (s.length() == 0) s = io.nextLine();
    12 
    13         min = Math.min(p, n - p);
    14 
    15         d(0,"");
    16         if (find==0)System.out.println("No");
    17     }
    18     
    19     //find保证只打印一个结果
    20     static void d(int depth, String ss) {
    21         if (find==1)return;
    22         if (depth == min) {
    23             StringBuilder s0 = new StringBuilder(ss + s.substring(min));
    24 
    25             OUT:
    26             //遍历p串的每一个字符,检查对应位是否有不一样的,只要有就输出结果
    27             for (int i = 0; i < min; i++) {
    28                 char ch = s0.charAt(i);
    29                 //遍历对应位
    30                 for (int j = i + p; j < s0.length(); j += p) {
    31                     //有不一样的,输出结果
    32                     if (s0.charAt(j) != ch) {
    33                         if (s0.charAt(j) == '.') {
    34                             if (ch == '0') s0.replace(j, j + 1, "1");
    35                             else s0.replace(j, j + 1, "0");
    36                         }
    37                         for (int l = 0; l < s0.length(); l++) if (s0.charAt(l) == '.') s0.replace(l, l + 1, "0");
    38                         System.out.println(s0.toString());
    39                         find=1;
    40                         return;
    41                     }
    42                 }
    43             }
    44             return;
    45         }
    46         if (s.charAt(depth)!='.')d(depth+1,ss+s.charAt(depth));
    47         else {
    48             d(depth+1,ss+"0");
    49             d(depth+1,ss+"1");
    50         }
    51     }
    52 }
  • 相关阅读:
    Hadoop WordCount改进实现正确识别单词以及词频降序排序
    两个栈实现一个队列
    数据库弱一致性四个隔离级别
    vs2008生成lib文件
    开始整理资料
    基于AKS素性检测的素数生成器
    生成指定位数的随机数
    Windows 7远程桌面 重启 关机 任务管理器 命令
    摩根IT实习经验谈及其他
    Hadoop下进行反向索引(Inverted Index)操作
  • 原文地址:https://www.cnblogs.com/towerbird/p/11242674.html
Copyright © 2011-2022 走看看