4 条题解

  • 1
    @ 2025-12-4 23:30:10
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    int a;
    scanf("%d",&a);
    while(a--)
    {
    int b,c,d=0,e=0;
    char m[200000]; 
    scanf("%d %s",&b,m);  
    c=strlen(m);
    for(int i=0;i<c;i++)
    {
    if(m[i]=='_')
    d++;   
    else if(m[i]=='-')
    e++; 
    }  
    if(d<1||e<2)
    printf("0\n"); 
    else if(e%2==0)   
    printf("%d\n",e*e/4*d);
    else if(e%2!=0)
    printf("%d\n",(e+1)*(e-1)/4*d);
    }
    return 0;    
    }
    
    • 0
      @ 2025-10-30 19:21:26
      #include <stdio.h>
      int main(){
          int n,m,sum=0;
          scanf("%d",&n);
          while(n--){
              scanf("%d",&m);
              char s[200009];
              scanf("%s",s);
              int i=0,cnt1=0,cnt2=0;
              while(i<m){
                  if(s[i]=='-'){
                      cnt1++;
                      i++;
                      //printf("cnt1=%d ",cnt1);
                  }else{
                      cnt2++;
                      i++;
                      //printf("cnt2=%d ",cnt2);
                  }
              }
              if(cnt1%2==1){
                  sum=cnt1/2*(cnt1/2+1)*cnt2;
              }else{
                  sum=cnt1/2*cnt1/2*cnt2;
              }
              printf("%d\n",sum);
          }
      }
      
      • 0
        @ 2025-10-28 11:00:17

        若` - `个数为 cnt1,` _ ` 个数为cnt2, 要想让`-_-`的个数最多,

        显而易见我们要让 ` - `安置在左右两边,假设左边L个右边R个,然后中间都是` _ `才能最优。Ans = l * r * cnt2

        数学规律:当l和r尽可能接近时,l × r的乘积最大(和固定时,两数越接近乘积越大)。因此取 l = cnt1 // 2,r = cnt1 - l,即可得到最大的l × r,进而得到最大的 “-_-” 次数。

      • 0
        @ 2025-10-27 0:40:08
        #include<stdio.h>
        typedef long long ll;
        const int N=1e6+5;
        const ll inf=1e18;
        ll t,n,d;
        char s[N];
        int main(){
            scanf("%lld",&t);
            while(t--){
                scanf("%lld",&n);
                scanf("%s",s);
                ll c1=0,c2=0;
                for(int i=0;i<n;i++){
                    if(s[i]=='-') c1++;
                }
                c2=n-c1;
                ll ans=0;
                if(c1%2==0){
                    ans=(c1/2)*(c1/2)*c2;
                } 
                else{
                    ans=(c1/2)*((c1+1)/2)*c2;
                }
                printf("%lld\n",ans);
                //右边写成c1+1是防止奇数时漏情况
                //例如,c1=5,c1/2=2,(c1+1)/2=3;
            }
            return 0;
        }
        
        
        • 1

        信息

        ID
        1163
        时间
        1000ms
        内存
        256MiB
        难度
        6
        标签
        递交数
        131
        已通过
        43
        上传者