Codeforces Round #719 (Div. 3)-E. Arranging The Sheep-前后缀
Posted Chivas_/Regal
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #719 (Div. 3)-E. Arranging The Sheep-前后缀相关的知识,希望对你有一定的参考价值。
题目:
分析:
既然每个星星都要聚成一堆
那么必定是前面的向后走
后面的向前走
不知道都走到哪才能得出结果
于是每个位置扫一遍就行了
思路:
开一个前缀一个后缀
分别表示前面的星星全聚到某个位置时需要几步
和后面的星星全聚到某个位置时需要几步
然后枚举每个空位置
维护一下最小值
缀的计算方式:如果当前位置是’.’,那么这个位置的值就是上一个位置的值+之前的星星个数。如果当前位置是’*’,那么这个位置的值就是上一个位置的值,且星星个数++
代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
#include <map>
#include <set>
#define G 10.0
#define LNF 1e18
#define eps 1e-6
#define PI acos(-1.0)
#define ll long long
#define INF 0x7FFFFFFF
#define Regal exit(0)
#define Chivas int main()
#define pb(x) push_back(x)
#define SP system("pause")
#define ull unsigned long long
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define IOS ios::sync_with_stdio(false)
#define MEM(a, b) memset(a, b, sizeof(a))
#define each_cass(cass) for (cin >> cass; cass; cass--)
#define test(a) cout << "---------" << a << "---------" << '\\n'
using namespace std;
inline void solve(){
ll n;
string s;
cin >> n;
cin >> s;
ll fro[s.size() +10]={0};
ll enn[s.size() + 10] = {0};
ll cnt = 0;//走前缀
for(ll i = 0; i < n; i++){
if(i==0){
fro[i] = 0;
cnt += (s[i] == '*');//初位置一定是0,但是判断是否有星星
continue;
}
if(s[i] == '*') cnt++, fro[i] = fro[i - 1];
else fro[i] = fro[i - 1] + cnt;//全体星星向右移动一格
}
cnt = 0;//走后缀
for(ll i = n - 1; i >= 0; i --){
if(i == n - 1){
enn[i] = 0;
cnt += (s[i] == '*');//初位置一定是0,但是判断是否有星星
continue;
}
if(s[i] == '*') cnt ++, enn[i] = enn[i + 1];//全体星星向左移动一格
else enn[i] = enn[i + 1] + cnt;
}
ll res = LNF;
for(ll i = 0; i < n; i ++){//枚举每个'.'的位置
if(s[i] == '.'){
if(i > 0) res = min(res, fro[i - 1] + enn[i]);
if(i < n - 1) res = min(res, fro[i] + enn[i + 1]);
}
}
if(res == LNF) res = 0;
cout << res << endl;
}
Chivas{
IOS;
int cass;
each_cass(cass){
solve();
}
Regal;
}
以上是关于Codeforces Round #719 (Div. 3)-E. Arranging The Sheep-前后缀的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #719 (Div. 3)Codeforces-1520ABCDE
Codeforces Round #719 (Div. 3) ABCDEF题解
Codeforces Round #719 (Div. 3) A-E
Codeforces Round #719 (Div. 3) A-G题解 G题详细注释