当前位置: 代码迷 >> 综合 >> Codeforces Round #461 (Div. 2) D Robot Vacuum Cleaner (贪心)
  详细解决方案

Codeforces Round #461 (Div. 2) D Robot Vacuum Cleaner (贪心)

热度:48   发布时间:2024-01-15 05:08:20.0

http://codeforces.com/problemset/problem/922/D
题目大意:给你一堆由s和h组成的字符串,求怎么连接这些字符串后得到的大串中sh子串最多。

巧妙的贪心排序,写一个int型的cal(string)函数,返回这个串的sh子串数,从后往前数s和h就行;
然后排序的cmp函数按return cal(a+b)>cal(b+a)即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
int n;
string s[100010];
long long cal(string a)
{long long num=0,t=0,p[100010]={
   0};for(int i=a.length()-1;i>=0;i--){if(a[i]=='h'){t++;}if(a[i]=='s'){num+=t;}}return num;
}
bool cmp(string a,string b)
{return cal(a+b)>cal(b+a);
} 
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){cin>>s[i];}sort(s+1,s+1+n,cmp);string ans="";for(int i=1;i<=n;i++){ans+=s[i];}printf("%lld",cal(ans));return 0;
}