题目链接:http://codeforces.com/contest/758/problem/B

题意:给定n个点灯的情况,灯只有四种颜色RBGY,然后如果某个灯坏了则用'!'表示,现在要求将坏的灯(即'!'的位置)用其他新的灯来替换(新灯只有前面描述的四种颜色),并且要满足最后的灯序列每连续四个位置的灯的颜色都不一样(即分别是给定的四种颜色,顺序任意)。问最后要用每种颜色的灯的数目。题目保证输入一定合法,即一定存在一个符合条件的序列

思路:因为每连续四个位置要满足颜色不一样的要求,所以我们可以单独枚举前四个位置坏的灯的颜色,然后后面的位置就可以递推来求得。用二进制的1111标准四种颜色灯出现的次数,1表示出现了,0表示没有出现。然后如果四个位置的值不为15(二进制表示1111)表示这个序列不符合题目要求,继续枚举下一种情况。

import java.io.PrintWriter;
import java.util.*; public class Main {
public static boolean flag;
public static String color = "RBYG";
public static StringBuffer s;
public static int ans[] = new int[color.length()]; public static void dfs(int idx,StringBuffer str) {
if (flag == true) {
return;
}
if (idx >= 4) {
flag = check(new StringBuffer(str));
return;
}
if (str.charAt(idx) == '!') {
for (int i = 0; i < 4 && flag == false; i++) {
str.setCharAt(idx, color.charAt(i));
dfs(idx + 1,new StringBuffer(str));
}
} else {
dfs(idx + 1,new StringBuffer(str));
}
} public static boolean check(StringBuffer str) {
int val = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '!') {
for (int j = 0; j < 4; j++) {
if ((val & (1 << j)) == 0) {
str.setCharAt(i, color.charAt(j));
val |= (1 << j);
}
}
} else {
val |= (1 << color.indexOf(str.charAt(i)));
}
if (i >= 3 && val != 15) {
return false;
}
if (i >= 3) {
val ^= (1 << color.indexOf(str.charAt(i - 3)));
}
}
s=str;
return true;
} public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
String str = cin.next();
s = new StringBuffer(str);
flag = false;
dfs(0,new StringBuffer(str));
Arrays.fill(ans, 0);
//out.println(s);
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '!') {
ans[color.indexOf(s.charAt(i))]++;
}
}
for (int i = 0; i < 4; i++) {
out.printf("%d", ans[i]);
out.printf("%c", i == 3 ? '\n' : ' ');
}
cin.close();
out.flush();
}
}

Codeforces Round #392 (Div. 2) - B的更多相关文章

  1. Codeforces Round #392 (Div. 2) F. Geometrical Progression

    原题地址:http://codeforces.com/contest/758/problem/F F. Geometrical Progression time limit per test 4 se ...

  2. Virtual Codeforces Round #392 (Div. 2)

    下午闲来无事开了一场Virtual participation 2h就过了3道水题...又跪了..这只是Div. 2啊!!! 感觉这次直接就是跪在了读题上,T1,T2读题太慢,T3还把题读错了 要是让 ...

  3. Codeforces Round #392 (Div. 2) - C

    题目链接:http://codeforces.com/contest/758/problem/C 题意:给定N*M矩阵的教室,每个位置都有一个学生,Sergei坐在[X,Y],然后老师会问K个问题,对 ...

  4. Codeforces Round #392 (Div. 2) - A

    题目链接:http://codeforces.com/contest/758/problem/A 题意:给定N个城市的福利,国王现在想让每个城市的福利都一致.问最少需要花多少钱使得N个城市的福利值都一 ...

  5. Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)

    D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...

  6. Codeforces Round #392 (Div. 2)

    D题,给出n,k,k是n进制数,但是大于十进制时,它的表示方法仍为十进制那种,比如16进制下的15,我们可以看成就是15,或者1|5,也就是1×16+5 = 21,让你求出能表达的最小十进制数 从后面 ...

  7. Codeforces Round #392 (Div. 2)-D. Ability To Convert

    D - Ability To Convert 题目大意:给你一个数字 n 接下来再输入一个数字 w(<10^60),表示w这个数字是 n 进制的, 并且超过十进制也用数字表示,这样就有多种组合了 ...

  8. Codeforces Round #392 (Div. 2) A B C 水 模拟 暴力

    A. Holiday Of Equality time limit per test 1 second memory limit per test 256 megabytes input standa ...

  9. Codeforces Round #392 (div.2) E:Broken Tree

    orz一开始想不画图做这个题(然后脑袋就炸了,思维能力有待提高) 我的做法是动态规划+贪心+构造 首先把题目给的树变成一个可行的情况,同时weight最小 这个可以通过动态规划解决 dp[x]表示以x ...

随机推荐

  1. Vue----项目增加百度统计

    到百度统计->注册账号->新增网址->获取代码 在Vue单页面开发中接入百度统计代码时,如果直接按照官网的走会出现错误,就是_hmt找不到,这是因为在一个js文件里声明的变量在另一个 ...

  2. [luogu]P1168 中位数[堆]

    [luogu]P1168 中位数 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数.即前1 ...

  3. easyui for jquery之tooltip

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. execute、executeQuery和executeUpdate之间的区别 转

    转:http://blog.csdn.net/colin_fantasy/article/details/3898070 execute.executeQuery和executeUpdate之间的区别 ...

  5. 台哥原创:java 扫雷源码

    扫雷,十年前大学时候开发的,界面参照的电脑自带扫雷游戏. 一直是我最喜欢的单机游戏,现在微软的新系统都不能玩了. 幸好还有自己开发的,可以过下瘾.程序员就有这点好处嘛. ​ 这几年陆陆续续,把这个扫雷 ...

  6. Jira中的Tempo查看component以及issue的工作量汇总

    在右侧group by的地方,同时选中component和issue

  7. java.lang.IllegalArgumentException: object is not an instance of declaring class新发现

    文章目录 背景 报错 解决 引申 背景 因为要将方法缓存起来提高性能 报错 java.lang.IllegalArgumentException: object is not an instance ...

  8. 更新系统时间 & 查看/修改LINUX时区和时间

    一.时区0. date '+%Y%M%D' 按照格式显示当前日期,结果如下: date "+%Y-%m-%d %H:%M:%S" 1. 查看当前时区 :[root@master ~ ...

  9. (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告

    前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...

  10. Support Vector Machine(1):线性可分集的决策边界

    与Logistuc Regression相比,SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化.比较容易理解 ...