问题标题: 7026 答案正确

0
0
已解决
张皓然
张皓然
中级光能
中级光能
/*
题目描述 De**ion
“Accepted:100分”是自动判题**同学们最期待的回复。本题属于酷町堂的
“Accepted:100分”大派送 —— 只要读入的字符串满足下列条件,**就输
出“YES”,否则输出“NO”。

得到“Accepted:100分”的条件是:

1、字符串中必须仅有 C、 D、 T这三种字符,不可以包含其它字符;
2、任意形如 xCDTx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 D 组成的字符串;
3、如果 aCbTc 是正确的,那么 aCbDTca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 D 组成的字符串。

输入描述 Input De**ion
第1行给出一个自然数n (<10),是需要检测的字符串个数。
接下来每个字符串占一行,字符串长度不超过100,且不包含空格。字符串中只能有一个C一个T,中间末尾和开头可以随便插入D。
但是必须满足开头的D的个数 * 中间的D的个数 = 结尾的D的个数

输出描述 Output De**ion
每个字符串的结果占一行,如果该字符串可以获得“Accepted:100分”,则输出YES,否则输出NO。

样例输入 Sample Input
8
CDT
CDDT
DDCDTDD
DDCDDTDDDD
xCDTx
CT
Whatever
DCDDDTDD
样例输出 Sample Output
YES
YES
YES
YES
NO
NO
NO
NO
数据范围及提示 Data Size & Hint
n<10
n个字符串,每个字符串长度不超过100
*/
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
//int a[255];
bool bsCDT(string s){
    for(int i=0;i<s.length();i++){
        if(s[i]!='C'&&s[i]!='D'&&s[i]!='T'){
            cout<<"NO\n";
            return 1;
        }
    }
    return 0;
}
bool ywCDT(string s){
    int C=0,D=0,T=0;
    for(int i=0;i<s.length();i++){
        if(s[i]=='C'){
            C++;
        }
        if(s[i]=='D'){
            D++;
        }
        if(s[i]=='T'){
            T++;
        }
    }
    if(!(C==1&&D&&T==1)){
        cout<<"NO\n";
        return 1;
    }
    return 0;
}
int C(string s){
    for(int i=0;i<s.length();i++){
        if(s[i]=='C'){
            return i;
        }
    }
}
int T(string s){
    for(int i=0;i<s.length();i++){
        if(s[i]=='T'){
            return i;
        }
    }
}
int main(){
    cin>>n;
    while(n--){
        cin>>s;
        if(bsCDT(s)){
            continue;
        }
        if(ywCDT(s)){
            continue;
        }
        int c=C(s);
        int t=T(s);
        int len=s.length()-1;
        if((c-0)*(t-c-1)==(len-t)){
            cout<<"YES\n";
        }else{
            cout<<"NO\n";
        }
//      cout<<(c-0)<<"*"<<(t-c-1)<<"="<<(len-t)<<"\n";
    }
    return 0;
}

极限了。

 

救我狗命,V你50


0
已采纳
姚炫好
姚炫好
资深守护
资深守护
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int main() {
    cin>>n;
    while(n--){
        cin>>s;
        map<char,int> m;
        int p,t;
        bool flag=0;
        for (int i=0;i<s.size();i++) {
            m[s[i]]++;
            if (s[i]=='C') p=i;
            if (s[i]=='T') t=i;
            if (s[i]!='C'&&s[i]!='D'&&s[i]!='T') flag=1;
        }
        // cout<<(m['C']!=1)<<" "<<(m['T']!=1)<<" "<<(m['D']==0)<<" "<<(flag==1)<<"\n";
        // cout<<m['C']<<" "<<m['T']<<" "<<m['D']<<" "<<flag<<"\n";
        if(m['C']!=1||m['T']!=1||m['D']==0||flag==1){
            cout<<"NO\n";
            continue;
        }
        int l=p,mid=t-p-1,r=s.size()-t-1;
        if(mid==0||l*mid!=r) cout<<"NO\n"; 
        else cout<<"YES\n";
    }
    return 0;
}

\

应该没事

0
0
0
0
0
0
我要回答