目录
签到(牛客网--河南省萌新赛第(二)场)
题目描述
背景:本来正在水群,计划12题,但是少了一题签到,群友给了建议(见样例下面的备注),就出了个签到题,在此感谢。
给定一个序列,你可以在序列中任取 4 个数 a,b,c,d (可以重复选取),问是否有一种选择满足:a+b+c=d。
输入描述:
第一行,一个正整数 n (1<=n<=1e3)。
第二行,n 个正整数,a1,a2,a3,...,an (1 ≤ ai ≤ 1e9)。
输出描述:
如果存在一种情况满足,则输出"Yes"(不加引号),否则输出"No"(不加引号)。
示例1
输入
4 1 8 20 90
输出
No
示例2
输入
4 1 2 3 4
输出
Yes
代码
需要解析下方评论
#include<iostream>
#include<set>
using namespace std;
set<int> a;
int b[10000];
int main(){
int n,m;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a.insert(b[i]+b[j]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a.find(b[i]-b[j])!=a.end()){
cout<<"Yes";
return 0;
}
}
}
cout<<"No";
return 0;
字符串(牛客网)
题目描述
小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中,长度最短是多少。
输入描述:
一行一个字符串S。只包含小写字母。S的长度不超过1e6.
输出描述:
一行一个数字,代表最短长度。数据保证存在一个合法的S的子串。
示例1
输入
ykjygvedtysvyymzfizzwkjamefxjnrnphqwnfhrnbhwjhqcgqnplodeestu
输出
49
代码
需要代码解析下方评论
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<set>
#include<cstring>
using namespace std;
char a[1000005];
int f[26];
int check(){
for(int i=0;i<26;i++) if(f[i]==0) return 0;
return 1;
}
int main(){
cin>>a;
int N=strlen(a);
int ans=N;
for(int i=0,j=0;j<N&&i<N;i++){
f[a[i]-'a']++;
while(check()&&j<N) ans=min(i-j+1,ans),f[a[j]-'a']--,j++;
}
cout<<ans;
return 0;
}