Educational Codeforces Round 92 (Rated for Div. 2) C. Good String 模拟+暴力

    科技2022-07-15  126

    题意: 给你一个字符串 ,A=T 0 _0 0,T 1 _1 1,T 2 _2 2,T 3 . . . . _3.... 3....,T N − 1 _N-1 N1,T N _N N, 然后有两个操作,1.最后一个字符移到最前面形成一个字符串S,2.第一个字符移到最后形成一个字符串B,S=T N _N NT 0 _0 0,T 1 _1 1,T 2 _2 2,T 3 . . . . _3.... 3....,T N − 1 _N-1 N1, B=$,T 1 _1 1,T 2 _2 2,T 3 . . . . _3.... 3....,T N − 1 _N-1 N1,T N _N N, T 0 _0 0,问你如果S==B,需要删除多少个A里面的字符。

    题解: 要想满足题意:那么字符必然是aaaaa,或者ababab型,字符是0-9,所以首先处理每个字符的个数 ,然后暴力模拟ab;

    #pragma GCC optimize(2) #pragma GCC optimize(3) #include<bits/stdc++.h> #define ll long long #define ull unsigned long long #define fio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define mse(a,b) memset(a,b,sizeof a) #define pb push_back using namespace std; const int mod=1e9+7; const int maxx=1e6+10; using namespace std; const long double PI = 3.14159265358979323846; #define fio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); inline int read() { int x=0,f=1; char ch=getchar(); while (!isdigit(ch)) { if (ch=='-') f=-1; ch=getchar(); } while (isdigit(ch)) { x=x*10+ch-48; ch=getchar(); } return x*f;} int dp[maxx]; signed main(){ fio int n; scanf("%d",&n); while(n--){ char ss[maxx]; mse(dp,0); scanf("%s",ss); int len=strlen(ss); // cout<<len<<" "<<ss<<endl; for(int i=0;i<len;i++) dp[ss[i]-'0']++;///处理每个字符个数 int sum=0; for(int i=0;i<10;i++)///暴力枚举 a.b; { sum=max(sum,dp[i]); for(int j=0;j<10;j++) { int pp=0; if(i==j) continue; //a!=b for(int k=0;k<len;) { while(k<len&&ss[k]-'0'!=i) k++;k++;//判断a while(k<len&&ss[k]-'0'!=j) k++;k++;//判断b pp+=(k<=len); //记录ab出现的次数 } sum=max(pp<<1,sum); //ab是两个字符 所以要<<1 } } cout<<len-sum<<endl; //总数-满足题意的 } // system("pause"); return 0; }
    Processed: 0.014, SQL: 8