loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏
题目描述
小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏。
小 L 的赛车有三辆,分别用大写字母 AAA、BBB、CCC 表示。地图一共有四种,分别用小写字母 xxx、aaa、bbb、ccc 表示。
其中,赛车 AAA 不适合在地图 aaa 上使用,赛车 BBB 不适合在地图 bbb 上使用,赛车 CCC 不适合在地图 ccc 上使用,而地图 xxx 则适合所有赛车参加。
适合所有赛车参加的地图并不多见,最多只会有 ddd 张。
nnn 场游戏的地图可以用一个小写字母组成的字符串描述。例如:S=xaabxcbc 表示小L计划进行 888 场游戏,其中第 111 场和第 555 场的地图类型是 xxx,适合所有赛车,第 222场和第 333场的地图是 aaa,不适合赛车 AAA,第 444 场和第 777 场的地图是 bbb,不适合赛车 BBB,第 666 场和第 888 场的地图是 ccc,不适合赛车 CCC。
小 L 对游戏有一些特殊的要求,这些要求可以用四元组 (i,hi,j,hj) (i, h_i, j, h_j)(i,hi,j,hj) 来描述,表示若在第 iii 场使用型号为 hih_ihi 的车子,则第 jjj 场游戏要使用型号为 hjh_jhj 的车子。
你能帮小 L 选择每场游戏使用的赛车吗?如果有多种方案,输出任意一种方案。
如果无解,输出 -1
。
输入格式
输入第一行包含两个非负整数 nnn, ddd。
输入第二行为一个字符串 SSS。
nnn, ddd, SSS 的含义见题目描述,其中 SSS 包含 nnn 个字符,且其中恰好 ddd 个为小写字母 xxx。
输入第三行为一个正整数 mmm ,表示有 mmm 条用车规则。
接下来 mmm 行,每行包含一个四元组 i,hi,j,hji,h_i,j,h_ji,hi,j,hj ,其中 i,ji,ji,j 为整数,hi,hjh_i,h_jhi,hj 为字符 AAA 、BBB 或 CCC,含义见题目描述。
输出格式
输出一行。
若无解输出 -1
。
样例
样例输入
3 1
xcc
1
1 A 2 B
样例输出
ABA
小 LLL 计划进行 333 场游戏,其中第 111 场的地图类型是 xxx,适合所有赛车,第 222 场和第 333 场的地图是 ccc,不适合赛车 CCC。
小 LLL 希望:若第 111 场游戏使用赛车 AAA,则第 222 场游戏使用赛车 BBB。
那么为这 333 场游戏分别安排赛车 AAA、BBB、AAA 可以满足所有条件。
若依次为 333 场游戏安排赛车为 BBBBBBBBB 或 BAABAABAA 时,也可以满足所有条件,也被视为正确答案。
但依次安排赛车为 AABAABAAB 或 ABCABCABC 时,因为不能满足所有条件,所以不被视为正确答案。
数据范围与提示
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define maxn 50010
using namespace std;
char s[maxn],ch1[],ch2[];
int n,d,q,w[maxn];
bool flag,mark[maxn];
struct node{
int a,b,c,d;
bool operator < (const node &k)const{
return a<k.a;
}
}op[maxn];
int findl(int x){
int l=,r=q,res=;
while(l<=r){
int mid=(l+r)>>;
if(op[mid].a>=x)res=mid,r=mid-;
else l=mid+;
}
return res;
}
int findr(int x){
int l=,r=q,res=;
while(l<=r){
int mid=(l+r)>>;
if(op[mid].a<=x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
bool check(){
for(int i=;i<=n;i++){
if(s[i]=='a'&&w[i]==)return ;
if(s[i]=='b'&&w[i]==)return ;
if(s[i]=='c'&&w[i]==)return ;
if(mark[i]){
int l=findl(i),r=findr(i);
for(int j=l;j<=r;j++){
if(w[i]!=op[j].b)continue;
if(w[op[j].c]!=op[j].d)return ;
}
}
}
return ;
}
void dfs(int pos){
if(flag)return;
if(pos==n+){
flag=check();
if(flag){
for(int i=;i<=n;i++){
if(w[i]==)putchar('A');
else if(w[i]==)putchar('B');
else putchar('C');
}
exit();
}
return;
}
if(flag)return;
for(int i=;i<;i++){
if(flag)return;
w[pos]=i;
dfs(pos+);
}
}
void work1(){
scanf("%d",&q);
for(int i=;i<=q;i++){
scanf("%d%s%d%s",&op[i].a,&ch1,&op[i].c,&ch2);
mark[op[i].a]=;
op[i].b=ch1[]-'A';
op[i].d=ch2[]-'A';
}
sort(op+,op+q+);
dfs();
}
int main(){
scanf("%d%d",&n,&d);
scanf("%s",s+);
if(n<=){work1();return ;}
else {puts("-1");return ;}
}
35分 暴力
loj #2305. 「NOI2017」游戏的更多相关文章
- loj#2305. 「NOI2017」游戏 2-sat
链接 https://loj.ac/problem/2305 https://www.luogu.org/problemnew/show/P3825 思路 3-sat神马的就不要想了,NP问题 除去x ...
- 【LOJ】 #2305. 「NOI2017」游戏
题解 枚举x所在的地图的颜色,然后2-SAT建边 如果v所在的地图刚好是不能选的,那么u这边只能选另一种颜色 否则就是u的颜色到v的颜色 v的另一种颜色到u的另一种颜色 代码 #include < ...
- LOJ_2305_「NOI2017」游戏 _2-sat
LOJ_2305_「NOI2017」游戏 _2-sat 题意: 给你一个长度为n的字符串S,其中第i个字符为a表示第i个地图只能用B,C两种赛车,为b表示第i个地图只能用A,C两种赛车,为c表示第i个 ...
- 「NOI2017」游戏
「NOI2017」游戏 题目描述 小 L 计划进行 \(n\) 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 \(A\).\(B\).\ ...
- LOJ2305 「NOI2017」游戏
「NOI2017」游戏 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行$n$场 ...
- 「NOI2017」游戏 解题报告
「NOI2017」游戏 \(d\)这么小,你考虑直接对\(d\)个东西暴力 枚举\(x\)为\(a\)或\(b\)(\(c\)就不用了,因为\(a,b\)已经包含\(c\))了,剩下的就是个\(2-s ...
- LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推
题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大 ...
- LOJ 2303 「NOI2017」蚯蚓排队——链表+哈希表
题目:https://loj.ac/problem/2303 想到合并的时候可以只考虑接口附近的50个,但不太会分析复杂度,而且没有清楚地想到用哈希值对应个数. 看了题解才会…… 一直想用 splay ...
- LOJ 2302 「NOI2017」整数——压位线段树
题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 ...
随机推荐
- python's eithteenth day for me 面向对象——命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些明细称为类的属性. 而类有两种属性:静态属性和动态属性: 1,静态属性就是直接在类中定义的变量. 2,动态属性就是定义在类中的方 ...
- ndnarry矩阵处理
ndarray的矩阵运算 数组是编程中的概念,矩阵.矢量是数学概念. 在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义! 1. 矢量运算:相同大小的数组间运算应用在元素上 示例代码(1): ...
- leetcode872
class Solution { public: vector<int> v1; vector<int> v2; void GetLeaf(TreeNode* tree, in ...
- IOS证书申请 PPF provisioning profile Developer Certificate
[Error] No provisioning profile found for the selected build configuration 新来一个iPhone,真机调试的时候报错. 1.x ...
- bash shell笔记7 创建函数
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/525126 知 ...
- laravel框架容器管理的一些要点(转)
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- Java虚拟机(二):垃圾回收算法
一.介绍 GC(Garbage Collection),垃圾收集 Java中,GC的对象是堆空间和永久区 二.GC算法 1. 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 Java中未使用,使 ...
- xcode恢复语法高亮
[xcode恢复语法高亮] 非常简单,在Organizer中删除derivedData.
- “Device eth0 has different MAC address than expected, ignoring.”问题
配IP后进行激活的时候提示如下错误:("Device eth0 has different MAC address than expected, ignoring.") 百度了下, ...
- =面试题:java面试基本方向 背1 有用 项目二技术学完再看
一.Java基础 1. 集合框架A)集合中泛型优点? 将运行期的ClaasCastException 转到编译期异常. 泛型还提供通配符 1)HashMap---允许一个键为null,允许多个值为n ...