[CF1303C] Perfect Keyboard - DFS

Solution
根据原字符串建图,每个字符是一个点,相邻则连边
然后从每一个度数为 \(1\) 的点开始爆搜连通块,合法情况下应该是一条链
#include <bits/stdc++.h>
using namespace std;
#define int long long
int g[33][33],d[33],vis[33],fg=1;
vector <int> sta;
void dfs(int p) {
if(vis[p]) return;
vis[p]=1;
sta.push_back(p);
int flag=1;
for(int i=0;i<26;i++) {
if(vis[i]==0 && g[p][i]) {
if(flag) {
flag=0;
dfs(i);
}
else {
fg=0;
}
}
}
}
void solve(string str) {
sta.clear();
fg=1;
memset(g,0,sizeof g);
for(int i=1;i<str.size();i++) {
g[str[i]-'a'][str[i-1]-'a']=1;
g[str[i-1]-'a'][str[i]-'a']=1;
}
memset(d,0,sizeof d);
for(int i=0;i<26;i++) {
for(int j=0;j<26;j++) d[i]+=g[i][j];
}
memset(vis,0,sizeof vis);
for(int i=0;i<26;i++) {
if(d[i]<=1 && vis[i]==0) {
dfs(i);
}
}
if(sta.size()!=26) fg=0;
for(int i=0;i<26;i++) if(d[i]>2) fg=0;
if(fg) {
puts("YES");
for(int i=0;i<26;i++) cout<<(char)(sta[i]+'a');
cout<<endl;
}
else {
puts("NO");
}
}
signed main() {
int t;
cin>>t;
while(t--) {
string str;
cin>>str;
solve(str);
}
}
[CF1303C] Perfect Keyboard - DFS的更多相关文章
- 「CF1303C Perfect Keyboard」
前置芝士 图的遍历:通过DFS或者BFS遍历全图. 前向星:用来存边,但是在本题用也可以用一个二维数组解决. 具体做法 先从判断YES和NO开始,可以发现如果一个字母与三个及以上不同的字母相邻时肯定是 ...
- Educational Codeforces Round 82 C. Perfect Keyboard
Polycarp wants to assemble his own keyboard. Layouts with multiple rows are too complicated for him ...
- Codeforces1303C. Perfect Keyboard
本题可以转换成图论来做,每两个相邻点连一条边,然后统计每一个点的degree,如果>=2说明有一个点要相邻三个点,不满足题意,然后找出每个degree<2的点,这些点可以作为一段的起点,然 ...
- Educational Codeforces Round 82 (Rated for Div. 2) A-E代码(暂无记录题解)
A. Erasing Zeroes (模拟) #include<bits/stdc++.h> using namespace std; typedef long long ll; ; in ...
- [CF百场计划]#3 Educational Codeforces Round 82 (Rated for Div. 2)
A. Erasing Zeroes Description You are given a string \(s\). Each character is either 0 or 1. You wan ...
- 【题解】Educational Codeforces Round 82
比较菜只有 A ~ E A.Erasing Zeroes 题目描述: 原题面 题目分析: 使得所有的 \(1\) 连续也就是所有的 \(1\) 中间的 \(0\) 全部去掉,也就是可以理解为第一个 \ ...
- N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)
N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS Memory Limit:0KB 64bit IO Format:% ...
- hdu2369 Broken Keyboard(类似dfs)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:pid=2369">http://acm.hdu.edu.cn/showproblem.php ...
- AOJ 0033 Ball【DFS】
有一个筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B管或C管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B管和C管中的球从下往上标号递增. 输入: 第一行输 ...
随机推荐
- JAVA ReentrantLock的使用
源码如下 对比synchronized,synchronized使用时会显示的指定一个对象(方法为调用对象,代码块会需要对象作为参数),来获取一个对象的独占锁 而ReentrantLock可能就是使用 ...
- 如何用Python实现do...while语句
我在编程的时候可能会遇到如下代码: a = 0 while a != 0: a = input() print a 我所设想的运行过程是这样的: 很显然我是想先运行后判断的模式,即 do...whil ...
- 杭电-------2055An Easy Problem(C语言)
#include<stdio.h> int main() { int m; int i; scanf("%d", &m); ]; int y; int z; ; ...
- drf序列化大总结
目录 一.APIView的请求生命周期 二.序列化组件 视图类中使用序列化 Meta配置类中的配置 自定义校验规则 入库方法 自定义字段 如果有群改操作 重(难)点 三.视图家族 四.路由组件 五.权 ...
- mac 软件相关的
mac 系统教学 https://www.w3cschool.cn/macdevsetup/carp1i83.html 可以查看的软件网站 https://www.ifunmac.com/ https ...
- sublime text安装与使用记录
一.安装Sublime Text 3 官网 http://www.sublimetext.com/3 进入官网选择所需版本下载 打开ST3,点击菜单 View -> Show Console,会 ...
- JDK1.8_HashMap源码__构造函数
HashMap的底层实现是一个Node类型的数组,也就是说使用put(key, value)方法的时候就把key和value根据hashcode值存在table数组相应的下标中,源码如下: /** * ...
- C++ Primer抄书笔记(二)——变量和基本类型(下)
四.const限定符[引用/指针/顶层/常量表达式] const对象值不变,必须初始化,能完成此type的大部分operation. 一般,多文件独立变量,编译初始化仅文件内有效: 除非,(条件:初值 ...
- SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 -
SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 - 元旦刚过,就收到客户的业务人员报错说,当其对HU做转库(同一个公司代码下工厂到 ...
- 股票数据获取到了,导入MT4中,是否可以做出很好的量化交易策略呢?
寻找了很久,看到有tushare这个python的类库,但研究了几个小时都没有研究明白,anaconda安装和pycharm的使用都不是特别顺手,最后也是失败告终.还有就是我的低配的平板suerfac ...