Description

http://www.lydsy.com/JudgeOnline/upload/Noi2017D2.pdf

Solution

字符串里的'x'看起来很烦,于是考虑枚举这些'x'的情况。这里只要枚举'a'和'b'就行了,因为如果存在解的话,肯定包含了解

那么在枚举之后,每场比赛两个点,对应可以选的两辆车,然后就是个2-SAT的裸题了

#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=100000+10;
int n,m,d,e,ps[10],p[MAXN][3],tot,cnt,Be[MAXN],beg[MAXN],nex[MAXN<<2],to[MAXN<<2],DFN[MAXN],LOW[MAXN],Visit_Num,Stack[MAXN],In_Stack[MAXN],Stack_Num;
char s[MAXN];
struct node{
int i;char hi;
int j;char hj;
};
node limit[MAXN];
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void insert(int x,int y)
{
to[++e]=y;
nex[e]=beg[x];
beg[x]=e;
}
inline void Tarjan(int x)
{
DFN[x]=LOW[x]=++Visit_Num;
In_Stack[x]=1;
Stack[++Stack_Num]=x;
for(register int i=beg[x];i;i=nex[i])
if(!DFN[to[i]])Tarjan(to[i]),chkmin(LOW[x],LOW[to[i]]);
else if(In_Stack[to[i]]&&DFN[to[i]]<LOW[x])LOW[x]=DFN[to[i]];
if(DFN[x]==LOW[x])
{
int temp;++cnt;
do{
temp=Stack[Stack_Num--];
In_Stack[temp]=0;
Be[temp]=cnt;
}while(temp!=x);
}
}
inline bool solve()
{
tot=1;
for(register int i=1;i<=n;++i)
{
p[i][0]=p[i][1]=p[i][2]=0;
if(s[i]!='a')p[i][0]=++tot;
if(s[i]!='b')p[i][1]=++tot;
if(s[i]!='c')p[i][2]=++tot;
}
e=0;memset(beg,0,sizeof(beg));cnt=0;
memset(Be,0,sizeof(Be));
memset(DFN,0,sizeof(DFN));
memset(LOW,0,sizeof(LOW));
for(register int i=1;i<=m;++i)
if(s[limit[i].i]!=limit[i].hi-'A'+'a')
{
int u=p[limit[i].i][limit[i].hi-'A'],v=p[limit[i].j][limit[i].hj-'A'];
if(s[limit[i].j]==limit[i].hj-'A'+'a')insert(u,u^1);
else insert(u,v),insert(v^1,u^1);
}
for(register int i=2;i<=tot;++i)
if(!DFN[i])Tarjan(i);
for(register int i=2;i<=tot;i+=2)
if(Be[i]==Be[i^1])return false;
for(register int i=2,u;i<=tot;i+=2)
{
u=Be[i]>Be[i^1]?i^1:i;
if(p[i>>1][0]==u)putchar('A');
if(p[i>>1][1]==u)putchar('B');
if(p[i>>1][2]==u)putchar('C');
}
return true;
}
int main()
{
read(n);read(d);d=0;
scanf("%s",s+1);
read(m);
for(register int t=1;t<=m;++t)
{
int i,j;char hi,hj;
read(i);scanf("%c",&hi);
read(j);scanf("%c",&hj);
limit[t]=(node){i,hi,j,hj};
}
for(register int i=1;i<=n;++i)
if(s[i]=='x')ps[++d]=i;
int st=0;
for(;st<(1<<d);++st)
{
for(register int i=0;i<d;++i)s[ps[i+1]]=(st&(1<<i))?'b':'a';
if(solve())break;
}
if(st>=(1<<d))write(-1);
puts("");
return 0;
}

【刷题】BZOJ 4945 [Noi2017]游戏的更多相关文章

  1. BZOJ 4945 NOI2017 游戏 搜索+2-SAT

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4945 分析: 首先考虑没有x的情况,发现有一个明显的推理模型,容易看出来可以用2-SAT ...

  2. bzoj 4945: [Noi2017]游戏

    Description Solution 首先我们发现一个位置如果不是 \('x'\),那么就只有两种选择 而 \('x'\) 的个数小于等于 \(8\),直接枚举是哪个就好了 然后就是 \(2-sa ...

  3. 刷题总结——奇怪的游戏(scoi2012)

    题目: 题目描述 Blinker 最近喜欢上一个奇怪的游戏.这个游戏在一个 N*M  的棋盘上玩,每个格子有一个数.每次 Blinker  会选择两个相邻的格子,并使这两个数都加上 1.现在 Blin ...

  4. C#LeetCode刷题之#55-跳跃游戏(Jump Game)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3674 访问. 给定一个非负整数数组,你最初位于数组的第一个位置. ...

  5. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  6. BZOJ第一页刷题计划

    BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...

  7. 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)

    最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...

  8. 【刷题】BZOJ 2407 探险

    Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...

  9. 【刷题】BZOJ 4543 [POI2014]Hotel加强版

    Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...

随机推荐

  1. Postman无法正常启动解决办法

    问题描述: 应用程序窗口能够打开,但就是这样一直空白,什么都不显示.接下来,主窗口以纯白色加载,不显示任何其他内容. 接下来主窗口背景米色加载和菜单栏加载和工作.应用程序将永远保持这样, 有时界面会变 ...

  2. bitmap过大无法显示图片的问题 - z

    public Bitmap ratio(Bitmap image, float pixelW, float pixelH) {Bitmap bitmap = null;try {ByteArrayOu ...

  3. .net 设置Webbowser 版本

    .net 里的Webbowser控件默认情况是用IE7来渲染 可修改注册表试用是最新的版本来渲染: using System; using System.Collections.Generic; us ...

  4. [2016北京集训测试赛15]statement-[线段树+拆环]

    Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...

  5. 06-Git-Linux命令

    Git 命令 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 新建一个目录,将其初始化为Git代 ...

  6. 记录一次 @Autowired 无法注入( spring依赖正常 idea显示有spring已注入的图标)导致空指针异常的原因

    首先,参考 https://blog.csdn.net/weixin_40475523/article/details/81085990 然后发现 是因为我把自己的这个类加上了 @Service 注解 ...

  7. C# ConcurrentBag的实现原理

    目录 一.前言 二.ConcurrentBag类 三. ConcurrentBag线程安全实现原理 1. ConcurrentBag的私有字段 2. 用于数据存储的TrehadLocalList类 3 ...

  8. Hexo站点之域名配置【2】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要 因为Hexo个人博客是托管在github之上,每次访问都要使用 ...

  9. Jmeter(十二)_打印时间戳

    Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...

  10. 【容器魔方解读】AWS Re:Invent 2018大会

    每年云计算领域技术与商业风向标之一的AWS Re:Invent大会上周在美国拉斯维加斯召开,如往届一样,AWS密集发布了上百项的新产品或新技术.随着国内近两年云计算尤其是公有云的普及度越来越高,国内各 ...