Codeforces Round #392 (Div. 2) - B
题目链接: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的更多相关文章
- Codeforces Round #392 (Div. 2) F. Geometrical Progression
原题地址:http://codeforces.com/contest/758/problem/F F. Geometrical Progression time limit per test 4 se ...
- Virtual Codeforces Round #392 (Div. 2)
下午闲来无事开了一场Virtual participation 2h就过了3道水题...又跪了..这只是Div. 2啊!!! 感觉这次直接就是跪在了读题上,T1,T2读题太慢,T3还把题读错了 要是让 ...
- Codeforces Round #392 (Div. 2) - C
题目链接:http://codeforces.com/contest/758/problem/C 题意:给定N*M矩阵的教室,每个位置都有一个学生,Sergei坐在[X,Y],然后老师会问K个问题,对 ...
- Codeforces Round #392 (Div. 2) - A
题目链接:http://codeforces.com/contest/758/problem/A 题意:给定N个城市的福利,国王现在想让每个城市的福利都一致.问最少需要花多少钱使得N个城市的福利值都一 ...
- 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 ...
- Codeforces Round #392 (Div. 2)
D题,给出n,k,k是n进制数,但是大于十进制时,它的表示方法仍为十进制那种,比如16进制下的15,我们可以看成就是15,或者1|5,也就是1×16+5 = 21,让你求出能表达的最小十进制数 从后面 ...
- Codeforces Round #392 (Div. 2)-D. Ability To Convert
D - Ability To Convert 题目大意:给你一个数字 n 接下来再输入一个数字 w(<10^60),表示w这个数字是 n 进制的, 并且超过十进制也用数字表示,这样就有多种组合了 ...
- 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 ...
- Codeforces Round #392 (div.2) E:Broken Tree
orz一开始想不画图做这个题(然后脑袋就炸了,思维能力有待提高) 我的做法是动态规划+贪心+构造 首先把题目给的树变成一个可行的情况,同时weight最小 这个可以通过动态规划解决 dp[x]表示以x ...
随机推荐
- Linux学习-DNS服务相关
一.DNS服务简介 1.基本概念 (1) DNS( Domain Name System )域名系统,是一种组织成域层次结构的计算机和网络服务命名系统,是一个应用层协议,使用TCP与UDP的53端口, ...
- xcode7 添加个人账户 is not on any development teams
XCODE7已经可以免费真机测试, 但添加个人账户后,显示 is not on any development teams , 解决办法: 点击 “-” 删除当前账户,退出XCODE重新打开再添加即可 ...
- Centos7防火墙和SELinux的开启和关闭
在虚拟机里面开启多个服务,对应多个端口,在防火墙开启的情况下,就要对外开放端口,这样客户端才能正常访问,但比较繁琐,关闭更直接点. 防火墙 临时关闭防火墙 systemctl stop firewal ...
- 【转】Office 2003 EXCEL多窗口打开
转自:http://blog.csdn.net/god_is_gril/article/details/8992587 1.注册表备份开始/运行,输入regedit回车,打开注册表.在注册表界面定位到 ...
- 1206C Almost Equal
题目大意 给你一个n 让你用1~2*n的数填满一个2*n个点的环 使得任意连续的n个位置的和的最大值减最小值不大于1 分析 我们通过瞎jb找规律发现n为偶数吴姐 而n为奇数我们设前n个位置为0组,后n ...
- anki2.1中使用latex,使用 MathJax 渲染latex格式的数学公式,化学公式
说说mathJax的优点: 不在anki媒体库生成图片,有利于节约手机空间. 再说说它的缺点:需要学习latex,需要一些时间去掌握latex语法. 1.去MathJax的github下载源码包 2. ...
- 设计模式 - 门面模式(Facade Pattern,也叫外观模式)
简介 场景 将系统划分为若干个子系统有利于降低系统的复杂性,但是这会增加调用者的复杂性.通过引入 Facade 可以对调用者屏蔽系统内部子系统的细节. Java 中有多个日志库,例如 log4j.lo ...
- Cookie 记录最后访问时间
package cn.gs.ly.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.D ...
- vc code 一个非常不错的插件
https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer 这个是地址,前提下是安装了vc ...
- ELK日志分析系统之logstash7.x最新版安装与配置
2 .Logstash的简介 2.1 logstash 介绍 LogStash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上.不同于分离的代 ...