2022春每日一题:Day 32



题目:[USACO12DEC]First! G
不太记得当时怎么想的了,但是显然,当一个字符串的前缀存在则他一定不是first,然后做法:对于每个字符串,把每个字符结尾跟他有相同前缀的单词的同元素建边,保证这个元素严格大于其他元素,然后判环,有环的话说明不能是first,反之则是。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <iostream>
const int N=3e4+5,M=3e5+5;
using namespace std;
int n,m,tot,num,ss[N],vis[N],rd[26];
string s,dic[N];
vector <int> g[26];
namespace trietree
{
	struct trie
	{
		int son[26],tag;
	}e[M];
	void insert(int len)
	{
		int p=0;
		for(int i=0;i<len;i++)
		{
			int k=s[i]-'a';
			if(!e[p].son[k])
			    e[p].son[k]=++tot;
			p=e[p].son[k];
		}
		e[p].tag=1;
	}
	bool topusort()
	{
		queue <int> q;
		while(!q.empty())
		    q.pop();
		int cnt=0;
		for(int i=0;i<26;i++)
		    if(!rd[i])
		        q.push(i);
		while(!q.empty())
		{
			int now=q.front();
			int len=g[now].size();
			++cnt;
			q.pop();
			for(int i=0;i<len;i++)
			{
				int k=g[now][i];
				--rd[k];
				if(!rd[k])
				    q.push(k);
			}
		}
		return cnt==26;
	}
	void clear(int len,int id)
	{
		int p=0,ok=0;
		s=dic[id];
		for(int i=0;i<26;i++)
		    g[i].clear(),rd[i]=0;
		for(int i=0;i<len;i++)
		{
			if(e[p].tag)
			    ok=1;
			int k=s[i]-'a';
			for(int j=0;j<26;j++)
			    if(j!=k && e[p].son[j])
			        g[k].push_back(j),rd[j]++;
			p=e[p].son[k];
		}
		if(!topusort())
		    ok=1;
		if(ok)
		    vis[id]=1;
		num+=ok;
	}
}
using namespace trietree;
int main()
{
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		ss[i]=s.length();
		dic[i]=s;
		insert(ss[i]);
	}
	for(int i=1;i<=n;i++)
	    clear(ss[i],i);
	cout<<n-num<<'\n';
	for(int i=1;i<=n;i++)
	    if(!vis[i])
	        cout<<dic[i]<<'\n';
	return 0;
}
2022春每日一题:Day 32的更多相关文章
- 老男孩IT教育-每日一题汇总
		老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ... 
- 【JavaScript】Leetcode每日一题-二叉搜索树的范围和
		[JavaScript]Leetcode每日一题-二叉搜索树的范围和 [题目描述] 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和. 示例1: 输入: ... 
- 【JavaScript】Leetcode每日一题-组合总和4
		[JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ... 
- 【JavaScript】【dp】Leetcode每日一题-解码方法
		[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ... 
- 【python】Leetcode每日一题-笨阶乘
		[python]Leetcode每日一题-笨阶乘 [题目描述] 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 ... 
- 【python】Leetcode每日一题-颠倒二进制位
		[python]Leetcode每日一题-颠倒二进制位 [题目描述] 颠倒给定的 32 位无符号整数的二进制位. 示例1: 输入: 00000010100101000001111010011100 输 ... 
- 【python】Leetcode每日一题-不同的子序列
		[python]Leetcode每日一题-不同的子序列 [题目描述] 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数. 字符串的一个 子序列 是指,通过删除一些(也可以 ... 
- 【Java每日一题】20170106
		20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ... 
- 【Java每日一题】20170105
		20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ... 
- 【Java每日一题】20170104
		20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ... 
随机推荐
- 第五十六篇:webpack的loader(四) -打包js中的高级语法
			好家伙, 1.打包处理js文件中的高级语法 webpack只能打包处理一部分高级的JavaScript 语法.对于那些webpack无法处理的高级js 语法,需要借 助于 babel-loader 进 ... 
- 第六篇:vue.js模板语法(,属性,指令,参数)
			Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统. 结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上.( ... 
- PostgreSQL 绑定变量窥探
			今天我们要探讨的是 custom执行计划和通用执行计划.这一技术在 Oracle中被称为绑定变量窥视.但 Kingbase中并没有这样的定义,更严格地说,Kingbase叫做custom执行计划和通用 ... 
- KingbaseES R6 集群修改ssh端口执行sys_backup.sh备份案例
			数据库环境:** test=# select version(); version ---------------------------------------------------------- ... 
- C#:winform窗体 实现类似QQ的窗体在桌面边缘停靠和隐藏
			设计思路:1.使用定时器(Timer)来监控鼠标位置和窗体位置,并实现窗体的停靠和隐藏2.当鼠标拖动窗体时,窗体才有可能根据自身位置决定是否停靠3.如果窗体四周没有接触到屏幕边缘则不会停靠4.如果窗体 ... 
- Deployment故障排除图解
			PDF文件下载地址:https://files.cnblogs.com/files/sanduzxcvbnm/troubleshooting-kubernetes.pdf 
- Readsh中文版初始设置
			B站视频教程网址:https://space.bilibili.com/630285695/video 安装成功后,打开浏览器输入http://ip:5000如果出现如下画面,即告安装成功. 初始设置 ... 
- WPF开发经验-实现自带触控键盘的TextBox
			一 引入 项目有个新需求,当点击或触碰TextBox时,基于TextBox的相对位置,弹出一个自定义的Keyboard,如下图所示: 二 KeyboardControl 先实现一个自定义的Keyboa ... 
- Node.js(四)json
			npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ... 
- python之流程控制上-if、while
			流程控制 编写程序,是将自己的逻辑思想记录下来,使得计算机能够执行的过程. 而流程控制,则是逻辑结构中十分重要的一环. 在程序中,基础的流程结构分为顺序结构.分支结构.顺序结构 顺序结构自不必多说,上 ... 
