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当日代码/文档签入记录 ...
随机推荐
- 怎么给罗技K480 增加Home、End键
最近看张大妈上很多人分享了我的桌面,有感于整天低头码字不利健康,隧鼓捣起自己的电脑桌了. 此处省略N字... 进入正文,我码字用的是罗技的K480蓝牙键盘 码了几行代码,发现没有Home.End键,这 ...
- Win32 键盘事件 - 击键消息、字符消息、插入符号(光标)
注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 以下内容主 ...
- [自带避雷针]DropShadowEffect导致内存暴涨
原文:[自带避雷针]DropShadowEffect导致内存暴涨 [自带避雷针]DropShadowEffect导致内存暴涨 周银辉 从学习WPF开始, 就知道"位图效果"不是什 ...
- linux命令行模式下实现代理上网 专题
有些公司的局域网环境,例如我们公司的只允许使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是linux纯命令行的界面就....下面简单几步就可以实现了! 一.命令行界面的一般代理设置方 ...
- Debug权限提升
procedure SetPrivilege; var OldTokenPrivileges, TokenPrivileges: TTokenPrivileges; ReturnLength: dwo ...
- GIS基础软件及操作(十)
原文 GIS基础软件及操作(十) 练习十.网络分析 (1) 加深对网络分析基本原理.方法的认识:(2) 熟练掌握ARCGIS下进行道路网络分析的技术方法:(3) 结合实际.掌握利用网络分析方法解决地学 ...
- flume本地调试
本机idea远程调试flume:https://blog.csdn.net/u012373815/article/details/60601118 遇到 [root@hadoop02 bin]# ./ ...
- A simple in-process HTTP server for UWP
原文 http://www.dzhang.com/blog/2012/09/18/a-simple-in-process-http-server-for-windows-8-metro-apps 简单 ...
- extjs grid 复选框选择事件
开发中需求是统计选择的行数,所以要监控checkbox的选择事件包括表头的全选事件 遇到的问题就不赘述了 方案是监控grid的复选框和行加载时绑定事件 baseView: DBEN.controls. ...
- 在Azure中搭建Ghost博客并绑定自定义域名和HTTPS
绪论 之前一直使用cnblog写博客,现在将博客迁移至Microsoft Azure上的Ghost博客上,Ghost博客使用Markdown书写博客,页面简洁,是我喜欢的风格.具体参见官网:https ...