Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)
题目链接:点击打开链接
Pushok the dog has been chasing Imp for a few hours already.

Fortunately, Imp knows that Pushok is afraid of a robot vacuum cleaner.
While moving, the robot generates a string t consisting of letters 's' and 'h', that produces a lot of noise. We define noise of string t as the number of occurrences of string "sh" as a subsequence in it, in other words, the number of such pairs (i, j), that i < j and
and
.
The robot is off at the moment. Imp knows that it has a sequence of strings ti in its memory, and he can arbitrary change their order. When the robot is started, it generates the string t as a concatenation of these strings in the given order. The noise of the resulting string equals the noise of this concatenation.
Help Imp to find the maximum noise he can achieve by changing the order of the strings.
The first line contains a single integer n (1 ≤ n ≤ 105) — the number of strings in robot's memory.
Next n lines contain the strings t1, t2, ..., tn, one per line. It is guaranteed that the strings are non-empty, contain only English letters 's' and 'h' and their total length does not exceed 105.
Print a single integer — the maxumum possible noise Imp can achieve by changing the order of the strings.
4
ssh
hs
s
hhhs
18
2
h
s
1
The optimal concatenation in the first sample is ssshhshhhs.
题意:给一堆由s和h组成的字符串,让你拼接,使得子序列为“sh”的数量最多,并且输出这个最多的值
题解:对于每个给的字符串,无论怎么拼接,它本身拥有的sh是不变的,而将str1与str2拼接之后(str1在前)增加的sh数量为str1中的s数量乘str2中的h数量。
由此,可以构造数据结构,每个字符串拥有“s数量、h数量、sh数量”三个变量,注意struct的使用方法以及初始化方式。
接下来要解决的问题就是如何进行拼接,既然整体的sh数量只根据拼接方式决定,我们可以让s多的在前面?显然不阔仪。
我们将问题进行简化:如何拼接两个字符串可以让sh最多?授衔,两个字符串分别私有的的sh数量是无论如何都不变的,我们只看拼接之后增加的sh数量如何最多即可。如上面说的,我们只需要比较“str1中的s数量乘str2中的h数量”与“str2中的s数量乘str1中的h数量”哪个最多即可,前者多则str1排在前面,后者多str2排在前面。
知道如何排序了,怎么实现数据结构的排序呢?阔仪自己写一个冒泡,no! algorithm中的sort函数是可以对复杂数据结构进行排序的,只是要自己定义比较函数,所以嘿嘿。。。下面介绍sort中的cmp怎么写
cmp函数是一个bool类型的函数,假如我们定义的数据结构叫sh,那么bool cmp(sh a,sh b)是我们要定义的比较函数,如果返回true,则a排在前面,否则b排在前面
(加粗染红下划线)一定要注意cmp函数一定要保证涵盖了所有的情况!也就是说只要调用成功,cmp一定要有返回值出来,不然就会re。text 5 的噩梦。。
这题如果还有坑点的话,那就是日常char类型读入回车。。也很好解决,看代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#define min(a, b) a>=b?b:a
#define max(a, b) a>=b?a:b
typedef long long ll;
using namespace std;
struct sh{
ll ns;
ll nh;
ll nsh;
sh(): ns(0), nh(0), nsh(0){}
}str[100000+ 1000];
bool cmp(sh a, sh b){
if(a.ns * b.nh > a.nh * b.ns) return true;
else if(a.ns * b.nh < a.nh * b.ns) return false;
else {
if(a.ns > b. ns) return true;
else return false;
}
}
int main(){
int n;
scanf("%ld", &n);
char d;
scanf("%c", &d);//接收回车符
for(int i = 0; i < n; i++){
while(1){
scanf("%c", &d);
if(d == 's') str[i].ns++;
else if (d == 'h') {str[i].nh++;str[i].nsh+=str[i].ns;}
else break;
}
}
sort(str, str + n, cmp);
long long cnt = 0;
long long cnts = 0, cnth = 0;
for(int i = 0; i < n ; i++){
cnt+= str[i].nsh + cnts * str[i].nh;
cnts += str[i].ns;
}
printf("%lld\n", cnt);
return 0;
}
Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)的更多相关文章
- CF922D Robot Vacuum Cleaner 贪心+排序
正确的贪心方法:按照比例排序. code: #include <bits/stdc++.h> #define N 200000 #define ll long long #define s ...
- 【Codeforces 922D】Robot Vacuum Cleaner
[链接] 我是链接,点我呀:) [题意] 让你把n个字符串重新排序,然后按顺序连接在一起 使得这个组成的字符串的"sh"子序列最多 [题解] /* * 假设A的情况好于B * 也就 ...
- CodeForces - 922D Robot Vacuum Cleaner (贪心)
Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that Pushok is a ...
- Codeforces Round #461 (Div. 2) D. Robot Vacuum Cleaner
D. Robot Vacuum Cleaner time limit per test 1 second memory limit per test 256 megabytes Problem Des ...
- Codeforces 583 DIV2 Robot's Task 贪心
原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使 ...
- Codeforces 437C The Child and Toy(贪心)
题目连接:Codeforces 437C The Child and Toy 贪心,每条绳子都是须要割断的,那就先割断最大值相应的那部分周围的绳子. #include <iostream> ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- CodeForces 24D Broken robot(期望+高斯消元)
CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...
- Codeforces 1154D - Walking Robot - [贪心]
题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...
随机推荐
- Excel获取当前日期和时间
在Excel中获取当前时间 1.第一种在空的单元格内输入函数“NOW()”回车即可获取当前时间如图 2.第二种选中空单元格“按住CTRL+:”回车即可获取当前时间 3.第一种在空的单元格内输入函数“t ...
- Django 博客实现简单的全文搜索
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 搜索是一个复杂的功能,但对于一些简单的搜索任务,我们可以使用 Django Mode ...
- docker 修改实例名称
docker 容器(服务)重命名只要一个命令就可以: docker rename 原容器名 新容器名 如:
- AcWing 247. 亚特兰蒂斯 | 扫描线
传送门 题目描述 有几个古希腊书籍中包含了对传说中的亚特兰蒂斯岛的描述. 其中一些甚至包括岛屿部分地图. 但不幸的是,这些地图描述了亚特兰蒂斯的不同区域. 您的朋友Bill必须知道地图的总面积. 你自 ...
- 【转】在Eclipse下搭建Android开发环境教程
本文将全程演示Android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本,希望大家喜欢. 一 相关下载 三 Eclipse配置 (1)Java JDK下载 1 安装andr ...
- 树 dfs暴力判环 题意转化
以后还是要多做题啊 这一道题我把题目想的太简单了 用并查集做了一波 但是忘了一种情况 就是同一个树上可能会有环 这就不太对了 而且还不要忘了 一棵树的根节点是一个自环 也就是说这一题的答案就是 ...
- 深入理解es6中的Promise
https://www.jianshu.com/p/9e4af5b77253 https://zhuanlan.zhihu.com/p/30797777 https://segmentfault.co ...
- django restful 序列化
https://www.cnblogs.com/wt7018/p/11456440.html https://www.cnblogs.com/wt7018/p/11530962.html
- 清晰架构(Clean Architecture)的Go微服务: 事物管理
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...
- 团队项目-Beta冲刺1
博客介绍 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https://w ...