牛客周赛 Round 66——补题

A.小苯吃糖果

把最多的一堆和除最多的一堆其他糖果堆比较即可

int main()
{
    int a,b,c;
    
    cin>>a>>b>>c;
    
    cout<<max(max({a,b,c}),a+b+c-max({a,b,c}));
    
    return 0;
}

B.小苯的排列构造

    令ai=qi+q(qi) ai-1<=ai
    
    意思是
    例如
    q=3 q[3 2 1]
    
    a1=q1(1)+q(q1)=3+1=4
    a2=q2(2)+q(q2)=2+2=4
    a3=q3(3)+q(q3)=1+3=4
    
    
    构造一个满足这个算法的排序即可
    
    只需从小到大输出 n 即可满足
    
    10 9 8 7 6 5 4 3 2 1 ai都等于11
    
int main()
{

    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        for(int i=n;i>=1;i--) cout<<i<<" ";
        cout<<endl;
    }
    return 0;
}

C.小苯的最小整数

暴力枚举所有可能,找出最小值

{
    long long n;
    
    cin>>n;
    while(n--)
    {
      long long m=0,min=0;
      string s;   
      cin>>m;
      min=m;
      s=to_string(m);
      
      long long maxwei=s.length();
      long long wei=pow(10,maxwei-1);
      
      for(int i=0;i<maxwei-1;i++)
      {
          int temp=m/wei;
          m=m%wei;
          m=m*10;
          m+=temp;
         
          if(m<min)
          {
              min=m;
          }
          
      }
      cout<<min<<endl;
        

    }
    return 0;
}

字符串做法

思路: 通过substr函数截取字符串进行比较找到最小值,字典序大小即是数字大小
{
    int n;
    string s;
    
    cin>>n;
    while(n--)
    {
        string ans;
        cin>>s;
        ans=s;
        int m=s.size();
        
        s+=s;
        
        for(int i=1;i<=m;i++)
        {
            string t=s.substr(i,m);
            ans=min(ans,t);
        }
        
        cout<<ans<<endl;
        
    }
    return 0;
}

D.小苯的蓄水池(easy)

    1.定义三个数组
    water(存放每个区域的水量),block(存放挡板状态),sum(预处理各个区域水量的总和)
    
    思路:根据接收的op 1?2 进行不同的操作
    1 表示拿挡板
    cin>>l>>r;
    for(int i=l;i<r;i++)//取掉相应的挡板
    {
        block[i]=0;
    }
    2.进行查询 
  cin>>j;
  int L=j,R=j;
  //先查左边   墙| -|- | -|墙  |为挡板
  for(int i=j-1;j>0;i--) 
 //j 接受的是水池区域 而挡板在两块区域之间所以找左边的时候要在当前位置-1才是该水池左边第一个挡板的位置
  {
       if(!block[i])L=i;
       else break;    //直到遇见有挡板的为止
  }
 //查右边
  for(int i=j;i<n;j++)
  {
       if(!block[i])R=i+1; //找到右挡板后位置要加一,因为该位置右侧也会一起混合范围自然也要包括他
       else break; 
  }
  
  //最后 通过前缀和找到L R之间水量的平均值即可
    double s=sum[R]-sum[L-1];
    cout<<fixed<<setprecision(10)<<1.0*s/(R-L+1)<<endl;
  //(R-L+1)水池数
void solve()
{
        //思路 查找要查询的水池最左右两边被拿走的挡板的位置求之间的平均水量
     
    int n,m;
    cin>>n>>m;
    vector<long long>water(n+1),sum(n+1),block(n);//挡板
    for(int i=1;i<=n;i++)
    {
        cin>>water[i];
        sum[i]=sum[i-1]+water[i];
        block[i-1]=1;
    }
     
    while(m--)
    {
       int op;
       cin>>op;
       if(op==1)
       {
           int r,l;
           cin>>l>>r;
           for(int i=l;i<r;i++)block[i]=0;     //取掉挡板
       }
        else
        {
            int j;
            cin>>j;
            int R=j,L=j;
             
            for(int i=j-1;i>0;i--)
            {
                if(!block[i])L=i;
                else break;
            }
             
            for(int i=j;i<n;i++)
            {
                if(!block[i])R=i+1;
                else break;
            } 
            double s=sum[R]-sum[L-1];
            cout<<fixed<<setprecision(10)<<1.0*s/(R-L+1)<<endl;
        }
         
    }
}
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务