[题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard
链接:http://codeforces.com/contest/445/problem/A
描述:一个n*m的棋盘,有一些格子不能放棋子。现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同。输出一种可行解。
思路:脑筋急转弯。。。
下过国际象棋的都知道,棋盘本身可以染色成为黑白相间的格子,毁掉其中的格子后也不会影响其2-SAT的性质。直接输出再加一个判断当前格子是否能放棋子就可以了。
我的实现:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5 #define MaxN 120
6 char str[MaxN][MaxN];
7 int n,m;
8 int main()
9 {
10 int i,j,cur;
11 scanf("%d%d",&n,&m);
12 for(i=1;i<=n;++i)
13 scanf("%s",str[i]+1);
14 cur=0;
15 for(i=1;i<=n;++i)
16 {
17 for(j=1;j<=m;++j)
18 {
19 cur=(cur+1)%2;
20 if(str[i][j]=='-')
21 printf("-");
22 else if(cur)
23 printf("B");
24 else
25 printf("W");
26 }
27 if(m%2==0)
28 cur=(cur+1)%2;
29 printf("\n");
30 }
31 return 0;
32 }
效率:
然后要说的是,zyy太蠢了,一看完题目没多想就觉得是经典的2-SAT问题,然后就写啊写,结果WA了。。。。zyy觉得最多是个时间超限或者内存超限,怎么可能会WA掉!!!容后查错吧,先挖坑~~
我的实现(经典2-SAT写法,WA):
1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4 #define MaxN 20020
5 #define MaxM 160020
6 #define Maxn 120
7 int n,m,N;
8 struct node
9 {
10 int v;
11 node *next;
12 };
13 node edge[MaxM];
14 node *cnt=&edge[0];
15 node *adj[MaxN];
16 node edge2[MaxM];
17 node *cnt2=&edge2[0];
18 node *adj2[MaxN];
19 int dfn[MaxN],low[MaxN],dcnt;
20 int stack[MaxN],top;
21 int Belong[MaxN],Num[MaxN],opp[MaxN],scc;
22 int In[MaxN],q[MaxN],col[MaxN];
23 bool Instack[MaxN],ans[MaxN];
24 char str[Maxn][Maxn];
25 inline void Addedge(int u,int v)
26 {
27 node *p=++cnt;
28 p->v=v;
29 p->next=adj[u];
30 adj[u]=p;
31 }
32 inline void Addedge2(int u,int v)
33 {
34 node *p=++cnt2;
35 p->v=v;
36 p->next=adj2[u];
37 adj2[u]=p;
38 }
39 void Read()
40 {
41 scanf("%d%d",&n,&m);
42 N=n*m;
43 int i,j;
44 for(i=1;i<=n;++i)
45 {
46 scanf("%s",str[i]+1);
47 for(j=1;j<=m;++j)
48 if(str[i][j]=='.')
49 {
50 if(i>1&&str[i-1][j]=='.')
51 {
52 Addedge((i-1)*m+j,(i-2)*m+j+N);
53 Addedge((i-1)*m+j+N,(i-2)*m+j);
54 }
55 if(j>1&&str[i][j-1]=='.')
56 {
57 Addedge((i-1)*m+j,(i-1)*m+j-1+N);
58 Addedge((i-1)*m+j+N,(i-1)*m+j-1);
59 }
60 }
61 }
62 }
63 void Tarjan(int u)
64 {
65 int v;
66 dfn[u]=low[u]=++dcnt;
67 stack[++top]=u;
68 Instack[u]=true;
69 for(node *p=adj[u];p;p=p->next)
70 {
71 v=p->v;
72 if(!dfn[v])
73 {
74 Tarjan(v);
75 low[u]=min(low[u],low[v]);
76 }
77 else if(Instack[v])
78 low[u]=min(low[u],dfn[v]);
79 }
80 if(dfn[u]==low[u])
81 {
82 scc++;
83 do
84 {
85 v=stack[top];
86 top--;
87 Instack[v]=false;
88 Belong[v]=scc;
89 Num[scc]++;
90 }while(v!=u);
91 }
92 }
93 bool Work()
94 {
95 int i;
96 for(i=1;i<=N*2;i++)
97 if(!dfn[i])
98 Tarjan(i);
99 for(i=1;i<=N;++i)
100 {
101 if(Belong[i]==Belong[i+N])
102 return false;
103 opp[Belong[i]]=Belong[i+N];
104 opp[Belong[i+N]]=Belong[i];
105 }
106 int u,v;
107 for(i=1;i<=N*2;i++)
108 for(node *p=adj[i];p;p=p->next)
109 {
110 v=p->v;
111 if(Belong[i]!=Belong[v])
112 {
113 Addedge2(Belong[v],Belong[i]);
114 In[Belong[i]]++;
115 }
116 }
117 int l=0,r=0;
118 for(i=1;i<=scc;i++)
119 if(!In[i])
120 {
121 q[r]=i;
122 r++;
123 }
124 while(l<r)
125 {
126 u=q[l];
127 l++;
128 if(!col[u])
129 {
130 col[u]=1;
131 col[opp[u]]=-1;
132 }
133 for(node *p=adj2[u];p;p=p->next)
134 {
135 v=p->v;
136 In[v]--;
137 if(!In[v])
138 {
139 q[r]=v;
140 r++;
141 }
142 }
143 }
144 for(i=1;i<=N*2;++i)
145 if(col[Belong[i]]==1)
146 ans[i]=true;
147 return true;
148 }
149 void Print()
150 {
151 if(Work())
152 {
153 int i,j;
154 for(i=1;i<=n;++i)
155 {
156 for(j=1;j<=m;++j)
157 {
158 if(str[i][j]=='-')
159 printf("-");
160 else if(ans[(i-1)*m+j])
161 printf("B");
162 else
163 printf("W");
164 }
165 printf("\n");
166 }
167 }
168 else
169 printf("NIE\n");
170 }
171 int main()
172 {
173 Read();
174 Print();
175 return 0;
176 }
欢迎大神指点!!
[题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard的更多相关文章
- Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs
题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...
- [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry
链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...
- Codeforces Round #254 (Div. 2) A DZY Loves Chessboard
先生成nXm的BW棋盘 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB 类似上面交替变换 然后将输入为’-’的地方替换成‘-’即可 #include <iostream& ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树
题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...
- Codeforces Round #254 (Div. 1) D - DZY Loves Strings
D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...
- Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力
D. DZY Loves Strings 题目连接: http://codeforces.com/contest/444/problem/D Description DZY loves strings ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块
C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...
- Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题
A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...
- Codeforces Round #254 (Div. 2)B. DZY Loves Chemistry
B. DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standa ...
随机推荐
- 【刷题-LeetCode】198 House Robber
House Robber You are a professional robber planning to rob houses along a street. Each house has a c ...
- C++ 基本类型的大小
C++的基本类型: char bool (unsigned) short (int) (unsigned) int (unsigned) long (int) (unsigned) long long ...
- HttpServletRequest类介绍
HttpServletRequest类介绍 1,HttpServletRequest类作用: 每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Req ...
- HTML 基础1
HTML 超文本标记语言 文件后缀html,htm 标签成对出现:开始标签--结束标签 元素内容位于开始标签--结束标签之间(可以有空内容) 空元素<a/> 大小写不敏感 元素,属性 &l ...
- python小兵 面向对象继承super和c3算法
python多继承 在前面的学习过程中. 我们已经知道了Python中类与类之间可以有继承关系. 当出现了x是一种y的的时候. 就可以使⽤继承关系. 即"is-a" 关系. 在继承 ...
- C++ POD 类型
POD 是 C++ 中一个比较重要的概念,POD 是英文 Plain Old Data 的缩写(通俗讲就是类或结构体通过二进制拷贝后还能保持其数据不变),用来描述一个类型(包括 class.union ...
- Pandas 秘籍·翻译完成
协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 ...
- LaunchScreen原理
会自动加载LaunchScreen是因为在Target当中,指定了Launch Screen file 它的底层实现其实把LaunchScreen上的东西,生成了一张图片,然后把这张图片设为程序的启动 ...
- Serializable接口中serialVersionUID字段的作用
序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类. 如果接收者加 ...
- .NET6: 开发基于WPF的摩登三维工业软件 (2)
在<.NET6: 开发基于WPF的摩登三维工业软件 (1)>我们创建了一个"毛坯"界面,距离摩登还差一段距离.本文将对上一阶段的成果进行深化,实现当下流行的暗黑风格UI ...