A. Yes-Yes?
problem
判断给定的字符串是否为无穷个 YesYesYes
拼接组成的字符串的连续子串。\(|S|\leq 50\)。
solution
暴力。
具体地,判断 \(S,Ye+S,Y+S\) 是否有一个是合法的。
code
点击查看代码
typedef long long LL;
string t="Yes";
bool check(string s){
for(int i=0;i<s.size();i++) if(t[i%3]!=s[i]) return 0;
return 1;
}
int main(){
string s;
for(scanf("%*d");cin>>s;puts(check(s)||check("Ye"+s)||check("Y"+s)?"yes":"no"));
return 0;
}
B. Lost Permutation
problem
判断是否存在一个排列 \(p\) 使得:\(b\) 是它的子序列;\(\sum_ip_i-\sum_ib_i=S\)。\(n\leq50,s\leq 1000\)。
solution
枚举 \(p\) 的长度。
不必每次都暴力填满,只需要开一个桶,在值域上从小往大扫即可。
code
点击查看代码
typedef long long LL;
int n,s,t[1010];
int mian(){
for(int i=1,x;i<=n;i++) scanf("%d",&x),t[x]++;
int maxk=0;
for(int i=1;i<=100;i++) if(t[i]>1) return puts("no"),0; else if(t[i]) maxk=i;
while(t[maxk]) maxk--;
for(int i=1;i<=1000;i++){
if(!t[i]) s-=i;
if(s<0) return puts("no"),0;
else if(!s&&i>=maxk) return puts("yes"),0;
}
puts("no");
return 0;
}