题目链接:点击打开链接

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.

Input

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.

Output

Print a single integer — the maxumum possible noise Imp can achieve by changing the order of the strings.

Examples
input

Copy
4
ssh
hs
s
hhhs
output
18
input

Copy
2
h
s
output
1
Note

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)的更多相关文章

  1. CF922D Robot Vacuum Cleaner 贪心+排序

    正确的贪心方法:按照比例排序. code: #include <bits/stdc++.h> #define N 200000 #define ll long long #define s ...

  2. 【Codeforces 922D】Robot Vacuum Cleaner

    [链接] 我是链接,点我呀:) [题意] 让你把n个字符串重新排序,然后按顺序连接在一起 使得这个组成的字符串的"sh"子序列最多 [题解] /* * 假设A的情况好于B * 也就 ...

  3. CodeForces - 922D Robot Vacuum Cleaner (贪心)

    Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that Pushok is a ...

  4. 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 ...

  5. Codeforces 583 DIV2 Robot's Task 贪心

    原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使 ...

  6. Codeforces 437C The Child and Toy(贪心)

    题目连接:Codeforces 437C  The Child and Toy 贪心,每条绳子都是须要割断的,那就先割断最大值相应的那部分周围的绳子. #include <iostream> ...

  7. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  8. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  9. Codeforces 1154D - Walking Robot - [贪心]

    题目链接:https://codeforces.com/contest/1154/problem/D 题解: 贪心思路,没有太阳的时候,优先用可充电电池走,万不得已才用普通电池走.有太阳的时候,如果可 ...

随机推荐

  1. 利用 Hexo 或者 hugo 搭建个人博客

    我们无法选择生活的样子,但我们可以记下来. 博客的开始 其实,一切都是为了更好的装逼.好吧,我着相了. 最开始想做一个自己博客,主要是因为看到了很多人都有,觉得自己没有太 Low 了.于是申请了 CS ...

  2. C#多线程与异步

    1.什么是异步同步 如果一个方法被调用,调用者需要等待该方法被执行完毕之后才能继续执行,则是同步. 如果方法被调用后立刻返回,即使该方法是一个耗时操作,也能立刻返回到调用者,调用者不需要等待该方法,则 ...

  3. 通过例子进阶学习C++(四)计算2的64次方,不服写写看

    ​ 本文是通过例子学习C++的第四篇,通过这个例子可以快速入门c++相关的语法. 1.乍一看题目非常简单,简单思考一下,可以通过for循环实现: #include <iostream> u ...

  4. 为什么双击打开py文件时窗口瞬间关闭了?

    当前理解,py文件里没有input() 等暂停程序运行的函数,程序运行速度太快,运行完就立马关闭了. input()调用后,程序会立即暂停,等待用户输入

  5. 发布到远程存储库时遇到错误: Git failed with a fatal error.

    正在推送 master发布到远程存储库时遇到错误: Git failed with a fatal error.Authentication failed for 'http://1212121xxx ...

  6. [bzoj4825] [loj#2018] [Hnoi2017] 单旋

    Description \(H\) 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(\(splay\))是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构 ...

  7. ZJCTF预赛一个.py的逆向题

    #!/usr/bin/env python # -*- coding:utf-8 -*- from hashlib import sha256 def xor(a,b): result = [] fo ...

  8. mva 的 第一弹 ASP.NET SignalR

    弹弹弹 弹走 占位 补齐

  9. 创建自定义路由处理程序(Creating a Custom Route Handler) | 定制路由系统| 高级路由特性 |精通ASP-NET-MVC-5-弗瑞曼

    自定义实现 IRouteHandler

  10. 个人第四次作业——Alpha项目测试

    一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ 这个作业要求在哪里 https: ...