2018.9.8 2018NOIP冲刺之配对
普及组第四题难度
主体思路竟然是贪心Q_Q
链接:https://www.nowcoder.com/acm/contest/164/D
来源:牛客网
题目描述
输入描述:
第一行输入三个整数n,L,K。
接下来n行,每行给出一个长度为L的字符串。
输出描述:
输出一行一个整数,代表最多可能的等价的字符串对。
输入例子:
5 4 2
ccdd
babd
bdcd
ccda
bacd
输出例子:
4
-->
输入
5 4 2
ccdd
babd
bdcd
ccda
bacd
输出
4
说明
让字符a和字符d等价,字符b和字符c等价。
备注:
数据包含10个数据点。每个数据点可能有不同的特性。
对于第1,2个数据点: 保证每个字符串只包含前4个小写字母
对于第3,4个数据点:每个字符串都只包含一种字母
对于第5,6个数据点:n<=10,L<=100
对于所有数据,满足:n <= 100, L <= 1000,K <= 28,每个字符串只包含前8个小写字母
最开始考虑的是dp 然鹅发现不能做
后来打dfs只得了20
其实如果从骗分的角度来想就可以知道是贪心(就是先同化大的嘛)
证明就不证明了应该很好理解
本题还存在一个难点就是如何解决传递性的问题
于是我们可以发现一个东西叫作并查集可以把所有的数字放在一个根节点下面
同时我们可以用一个叫作拓扑排序的东西进行贪心
上代码
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<map>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int n;
int L;
int k;
struct node
{
char x;
char y;
int dis;
friend bool operator < (const node &a,const node &b)
{
return a.dis>b.dis;
}
}edge[];
int cnt;
char a[][];
int dis[][];
int fa[];
bool vis[][];
inline int findset(int x)
{
return x==fa[x]? fa[x]:fa[x]=findset(fa[x]);
}
int ans;
inline bool can(int i,int j)
{
for(int k=;k<=L;k++)
if(findset(a[i][k]-'a')!=findset(a[j][k]-'a')) return false;
return true;
}
inline void lb()
{
for(int i=;i<=;i++)
for(int j=i+;j<=;j++)
if(dis[i][j])
{
cnt++;
edge[cnt].x=i+'a';
edge[cnt].y=j+'a';
edge[cnt].dis=dis[i][j];
}
}
signed main()
{
n=read();
L=read();
k=read();
for(int i=;i<=n;i++)
scanf("%s",a[i]+);
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
for(int k=;k<=L;k++)
{
if(a[i][k]!=a[j][k])
{
dis[a[i][k]-'a'][a[j][k]-'a']++;
dis[a[j][k]-'a'][a[i][k]-'a']++;
}
}
}
}
lb();
for(int i=;i<=;i++)
fa[i]=i;
int tot=;
sort(edge+,edge+cnt+);
for(int i=;i<=cnt;i++)
{
int x=edge[i].x-'a';
int y=edge[i].y-'a';
int xx=findset(x);
int yy=findset(y);
if(xx!=yy)
{
fa[xx]=yy;
tot++;
}
if(tot==k) break;
}
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
if(vis[i][j]||vis[j][i]) continue;
if(can(i,j))
{
ans++;
vis[i][j]=vis[j][i]=true;
}
}
}
put(ans);
olinr ~~(^_^)+love_nmr;
}
2018.9.8 2018NOIP冲刺之配对的更多相关文章
- 2018.11.2 2018NOIP冲刺之最短公共父串
很有意思的一个题 试题描述 给定字符串A和字符串B,要求找一个最短的字符串,使得字符串A和B均是它的子序列. 输入 输入包含两行,每行一个字符串,分别表示字符串A和字符串B.(串的长度不超过30) 输 ...
- 2018.10.20 2018NOIP冲刺之酒厂选址
题目传送门 明显能够看出有一个建图求路程的优化 然而发现10000*10000爆空间QAQ 为了做一些初始化方面的优化 我们发现了一个叫做前缀和的东西 可以在环上查到两个之间的最短距离 同时还要做一些 ...
- 2018.10.1 2018NOIP冲刺之立体图
2008NOIP普及组立体图 请自行百度(事实上放不下了) 图不是很清楚 下面有 [输入] 输入文件 drawing.in 第一行有用空格隔开的 2 个整数 m 和 n,表示有 m*n 个格子 (1 ...
- 2018.9.26 2018NOIP冲刺之栈
最小字典序(stack) 输入序列中有 n 个正整数,栈 S 开始为空. 你每次只可以进行下面两种操作之一:① 将输入序列头端的数据移至 S 栈顶(进 S 栈): ② 将 S 栈顶元素输出并删除(退 ...
- EZ 2018 1 21 2018noip第五次膜你赛
这次分数普遍偏高,而且yu'ben'ao又AK了! 但是最后一题莫名爆0让我很感伤啊(搓了1个多小时的20分暴力)! 难度偏低,主要是T2没剪枝,炸了3个点. T1 这种SB题恐怕是千年难遇了,PJ- ...
- EZ 2018 01 14 2018noip第四次膜你赛
这次惨烈的炸了个精光(只有20),然后对我的OI想法造成了巨大的转折. (以上有点作,其实我只是再也不用vector存图了而已(用邻接表)) 难度很不均匀,而且题型很狗(还有结论题???) T1 坑人 ...
- 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828
- 2018软工实践—Beta冲刺(7)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 整体软件测试 展示GitHub当日代码/文档签入记录(组 ...
- 2018软工实践—Beta冲刺(6)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 最终测试文稿编写 展示GitHub当日代码/文档签入记录 ...
随机推荐
- OpenExpressApp:精通 WPF UI Virtualization
原文:OpenExpressApp:精通 WPF UI Virtualization 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 Tre ...
- CentOS6.8环境安装oracle 11G
本节所讲内容: oracle11g基础环境配置 数据库的三种安装方式(图形.静默.克隆) http://db-engines.com REDHAT6.5安装oracle11.2.4 ORACLE11G ...
- laravel 增删修改
1.查 public function userTest(){ return $this->all(); } public function userTest(){ return $this-& ...
- UBUTUN 通过蓝牙连接Hoary和诺基亚手机
通过蓝牙连接Hoary和诺基亚手机 这个how to已经用Hoary.诺基亚6630和一个道尔芯片(Dongle)蓝牙(Usb蓝牙)测试过了.通过这个How to,你可以:-通过蓝牙,从你的电脑发送文 ...
- vxworks下libpcap的移植
linux下的libpcap应用能够成熟的使用在第三方的应用中,但基于vxworks开发的项目中需要使用libpcap的部分功能则无相应的实现. 研究了下libpcap向vxworks的移植,并且小有 ...
- 深度学习概述教程--Deep Learning Overview
引言 深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...
- 使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置
原文:使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置 摘要 讲解在IntelliJ IDEA中,如何进行Mysql数据库的配置 目录[-] 文章已针对IDEA 15做了一定的 ...
- SQLServer2005数据库快照的简单使用
原文:SQLServer2005数据库快照的简单使用 SQLServer2005数据库快照的简单使用 ...
- 解决 ThinkPHP Undefined class constant 'MYSQL_ATTR_INIT_COM
这是 php.ini 配置所导致: 放开php配置文件中被注释掉的.dll引用即可. extension=php_mysql.dllextension=php_mysqli.dllextension= ...
- Windows 10 版本信息
原文 https://technet.microsoft.com/zh-cn/windows/release-info Windows 10 版本信息 Microsoft 已更新其服务模型. 半年频道 ...