ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #719 (Div. 3) E. Arranging The Sheep(字符串)

2022-09-03 11:00:09  阅读:260  来源: 互联网

标签:Sheep typedef 游戏 719 int LL Codeforces cin 移动


https://codeforces.com/contest/1520

你在玩“放羊”游戏。这个游戏的目标是让羊排好队。

游戏中的关卡由一个长度为n的字符串描述,由字符“.”组成(空格)和' * '(羊)。

在一次移动中,你可以将任何羊向左移动一格或向右移动一格,如果相应的方格存在并且是空的。

羊一排好,游戏就结束了,也就是说,任何羊之间都不能有空格。

输出
对于每个测试用例输出,您需要完成该级别的最少移动次数。
input 
5
6
**.*..
5
*****
3
.*.
3
...
10
*.*...*.**
output 
1
0
0
0
9

方法一:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N=200200,M=2002;
LL a[N],b[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int T=1;
    cin>>T;
    while(T--)
    {
        LL n;
        cin>>n;
        string s;
        cin>>s;
        LL l=0,r=0;
        for(int i=0;i<n;i++)
            if(s[i]=='*') r++;
        LL sum=0;
        for(int i=0;i<n;i++)
        {
            if(s[i]=='*') l++,r--;
            else sum+=min(l,r);
        }
        cout<<sum<<endl;
    }
    return 0;
}

方法二:

  • 先找到每个*的所在位置
  • 然后按顺序排序的话,每个*接在前一个的后面需要向前移动多少位置(也就是代码中的偏移量)
  • 然后知道了这所有星星黏在一起需要的步数后,用中位数求得最小合并距离
        LL n;
        cin>>n;
        string s;
        cin>>s;
        s=" "+s;
        LL k=0;
        for(int i=1;i<=n;i++)
            if(s[i]=='*') b[++k]=i;
        for(int i=1;i<=k;i++)
        {
            b[i]-=i;//减去偏移量
            //cout<<b[i]<<" ";
        }
        LL sum=0;
        for(int i=1;i<=k;i++)
            sum+=abs(b[i]-b[k/2+1]);
        cout<<sum<<endl;

标签:Sheep,typedef,游戏,719,int,LL,Codeforces,cin,移动
来源: https://www.cnblogs.com/Vivian-0918/p/16652168.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有