蓝桥杯:想知道最优解

用了个很笨的办法才得了10分,想知道最优解


#include
using namespace std;
string s[100001];
int max1=0;
bool judge(int a,int con[100001],int num){//判断该下标是否使用过 
    for(int i=0;iif(a==con[i])
            return 0;
    }
    return 1;
}
void judge2(string a){//判断owo出现的次数 
 int cout=0;
 for(int i=1;i-1;i++){
  if(a[i]=='w'){
   if(a[i-1]=='o'&&a[i+1]=='o')
    cout++;
  }
 }
 if(max1void cal(int sum,int x,string a,int *con,int num){
    string b;
    if(sum==0){
     judge2(a);
 }
    for(int i=1;i<=x;i++){
        if(judge(i,con,num)){
          con[num]=i;
          b=a+s[i];
    cal(--sum,x,b,con,++num);
          b=s[i]+a;
          cal(sum,x,b,con,num);
        }
        else
         continue;
        
    }
}
int main()
{
    int n;cin>>n;
 int con[100001];//记录下标 
    for(int i=0;i>s[i];
    for(int i=0;i0],con,0);
     cout<

img

img

#include <stdio.h>
#include <string.h>

int main()
{
    int n, o, w, i, j;
    char t1[1001], t2;
    scanf("%d", &n);
    getchar();

    for (i = 0; i < n; i++)
    {
        o = 0;
        w = 0;
        fgets(t1, 1001, stdin);
        for (j = 0; j < strlen(t1); j++)
        {
            t2 = t1[j];
            if (t2 == 'o')
            {
                o++;
            }
            else if (t2 == 'w')
            {
                w++;
            }
        }
        if (o > w)
        {
            printf("%d\n", w);
        }
        else
        {
            printf("%d\n", w > 0 ? w - 1 : 0);
        }
    }

    return 0;
}