专栏文章

题解:P14317 「ALFR Round 11」A 浴眼盯真 (dingzhen)

P14317题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min1vsqu
此快照首次捕获于
2025/12/01 19:12
3 个月前
此快照最后确认于
2025/12/01 19:12
3 个月前
查看原文
首先用桶排序统计 26 个小写字母的出现次数。如果有任意一个字母未出现(出现次数为 0),则条件一不成立,条件二也会自然而然不成立。
如果该字符串的第一个字母和最后一个字母均为特有(即出现次数均为 1),则条件二不成立。(理由:该字符串中最大的两个子串,是 “去掉首字母的子串” 和 “去掉尾字母的子串”;若首字母和尾字母均为特有,那么这两个最大子串会缺少对应的特有字母,无法满足条件一,其余更小的子串自然也无法满足条件一,因此条件二不成立。)
若条件一和条件二均满足,则输出 yes;否则输出 no,并说明缺乏的条件(条件一不成立时,需同时指出缺乏条件 1 和 2;仅条件二不成立时,只需指出缺乏条件 2)
CPP
#include <iostream>
#include <cstring>
bool tiaojianyi(int a[]){
    for(int i=0;i<26;i++)if(a[i]==0)return false;
    return true;
}
int ct[26];
int main(){
    int t;
    std::cin>>t;
    while(t--){
        std::string s;
        std::cin>>s;
        int n=s.size();
        bool c1=0,c2=1;
        for(int i=0;i<n;i++)ct[s[i]-'a']++;
        c1=tiaojianyi(ct);
        if(c1)if(ct[s[0]-'a']==1&&ct[s[n-1]-'a']==1)c2=0;
        if(c1&&c2)std::cout<<"Yes\n";
        else{
            std::cout<<"No\n";
            if(!c1)std::cout<<"1 2\n";
            else std::cout<<"2\n";
        }
    }
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...