一、算法分析
将星号聚拢到中间的那个星号上,可以使得总路程最短。每个星号的路程花费是其距离中间星号之间的点号个数。最开始自己想到的方法是前缀和维护,但是TLE了。正解如下。
二、代码及注释
正解:
1 #include<iostream>
2 #include<cstring>
3 #include<algorithm>
4 #include<cstdio>
5 #define LL long long
6 using namespace std;
7 const int N=1000050;
8 char w[N];
9 int star[N]; //记录星号的位置
10 int n;
11 int main(){
12
13
14 int T;
15 cin>>T;
16 while(T--){
17 scanf("%d",&n);
18 scanf("%s",w+1);
19 int cnt=0;
20 for(