社交距离 I(分类讨论)

题目链接

题意:给你长度为n的字符串,其中0表示此位置没有牛,1表示此位置有牛。让你在不移动其他牛的情况下,插入两头牛,求最近两头牛位置位置差的最大值。

思路:先用p[i]记录第i头牛的位置。设xmin为未插入牛的情况下最近距离。可以分成两种情况讨论。①两头牛插在同一区间。②两头牛插在不同的区间。第一种情况:若第一段区间为000001,则一定是在位置1插入,再在中间插入另一头牛,即x00x01是最优的,产生的最近距离为y=(p[1]-1)/2 (向下取整)。同理最后一段,最近距离为y=(n-p[cnt])/2。对于两端有牛的区间i,产生的最近距离为y=(p[i+1]-p[i])/3 (向下取整),每段区间的y不断取max。则第一种情况的答案为min(y,xmin).第二种情况:首端的情况p[1]-1,尾段的情况为n-p[cnt],枚举中间位置,更新最大值y1和次大值y2。第二种的答案为min(xmin,y2),最终答案是两种答案取最大

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e5+10;
const int inf=0x3f3f3f3f;

using namespace std;
char str[N];
int p[N];
int n,cnt;
void solve()
{
    scanf("%d%s",&n,str+1);
    for(int i=1;i<=n;i++) 
    {
        if(str[i]=='1') p[++cnt]=i;
    }
    if(!cnt) cout<<n-1<<'\n';//初始为空的情况
    else 
    {
        //第一种情况,两头牛在同一区间
        int xmin=inf;
        for(int i=1;i<cnt;i++)
        {
            xmin=min(xmin,p[i+1]-p[i]);
        }
        int y=max((p[1]-1)/2,(n-p[cnt])/2);//首 尾
        for(int i=1;i<cnt;i++)//枚举中间位置
        {
            y=max(y,(p[i+1]-p[i])/3);
        }
        //第二种情况,两头牛在不同区间
        int y1=p[1]-1,y2=n-p[cnt];
        if(y2>y1) swap(y1,y2);//y1为插入后最大最近距离,y2为次大近距离
        for(int i=1;i<cnt;i++)//枚举中间位置放一头牛
        {
            int d=(p[i+1]-p[i])/2;
            if(d>=y1) y2=y1,y1=d;
            else if(d>y2) y2=d;
        }
        cout<<min(xmin,max(y2,y));

    }
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C最大社交距离是指一个人在社交互动中所能达到的最远的距离社交距离是指两个人之间的心理和情感的距离,而C最大社交距离则是在社交场合中,一个人与他人能够建立的最远的关系。 在社交互动中,不同的人有不同的C最大社交距离。一些人可能非常善于与陌生人交流,他们能够与任何人快速建立起亲近的关系,他们的C最大社交距离较大。而另一些人可能与陌生人交流时感到不舒服,他们只能在熟悉的人面前展现真实的自己,他们的C最大社交距离相对较小。 C最大社交距离的影响因素有很多。个人特质是其中一个重要的因素。有些人性格外向、开朗,他们与人相处时更自信,容易建立起长久的关系,他们的C最大社交距离相对较大。而一些人性格内向、害羞,他们在社交场合中感到不自在,他们的C最大社交距离相对较小。 除了个人特质,环境因素也会影响C最大社交距离。一个人成长的家庭和社会环境,也会对其社交能力产生影响。如果一个人在幼年时接触到良好的社交环境,他可能会培养出较大的C最大社交距离。 总而言之,C最大社交距离是一个人在社交互动中所能达到的最远距离。个人特质和环境因素都会对C最大社交距离产生影响。不同的人拥有不同的C最大社交距离,这也是人际关系中的重要考量因素之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值