被题意硬控了,以为修改是指 增删改 三种操作。
#include <iostream>
using namespace std;
int main() {
int t=1;
cin>>t;
int tot = 26+26+10+4;
while(t--){
string s;
cin>>s;
int n=s.size();
int upper=0,lower=0,digit=0,special=0;
for(int i=0;i<n;i++){
if(isdigit(s[i]))digit++;
if(isupper(s[i]))upper++;
if(islower(s[i]))lower++;
if(s[i]==','||s[i]=='.'||s[i]=='?'||s[i]=='!')special++;
}
int lack = 0+(upper<1)+(lower<1)+(digit<1)+(special<1);
int ans=0;
if(n>17||n<7||lack>=2){
cout<<0<<"\n";
continue;
}else {
if(n==17){
// if(lack>=1){
// cout<<0<<"\n";
// continue;
// }
// bool ok=false;
// if(upper>1)ans+=upper;
// if(lower>1)ans+=lower;
// if(digit>1)ans+=digit;
// if(special>1)ans+=special;
cout<<ans<<"\n";
}else if(n==7){
// if(lack==0){
// ans=tot;
// }else {
// if(upper<1)ans=26;
// if(lower<1)ans=26;
// if(digit<1)ans=10;
// if(special<1)ans=4;
// }
cout<<ans*(8)<<"\n";
}else {
if(lack>0){
// int r=n-4+1+(n<16)*(n+1);
int r=n-4+1;
if(!lower)ans+=r*26;
if(!upper)ans+=r*26;
if(!digit)ans+=r*10;
if(!special)ans+=r*4;
cout<<ans<<"\n";
}else {
// if(n<16){
// ans+=(n+1)*tot;
// }
// if(n>8){
// if(lower>1)ans+=lower;
// if(upper>1)ans+=upper;
// if(digit>1)ans+=digit;
// if(special>1)ans+=special;
// }
if(lower>1)ans+=lower*(tot-1);
else ans+=26-1;
if(upper>1)ans+=upper*(tot-1);
else ans+=26-1;
if(digit>1)ans+=digit*(tot-1);
else ans+=10-1;
if(special>1)ans+=special*(tot-1);
else ans+=4-1;
// ans++;
cout<<ans<<"\n";
}
}
}
}
}



京公网安备 11010502036488号