深信服 9.16笔试(挂经) 第三题求大佬指正
//第一题 最大公约数
int f(int a, int b){
int maxi=max(a,b);
int mini=min(a,b);
if(maxi%mini==0) return mini;
return f(maxi%mini, mini);
}
int main(){
int a,b;
cin>>a>>b;
cout<<f(a,b)<<endl;
} //第二题 病毒
int main(){
int n, x;
cin>>n>>x;
int l,r,temp_l,temp_r;
int val;
cin>>val;
l=max(0,val-x);
r=val+x;
int result=0;
for(int i=1;i<n;i++){
cin>>val;
temp_l=max(0, val-x);
temp_r=val+x;
if(temp_r<l || temp_l>r){
result++;
l=temp_l;
r=temp_r;
}else{
l=max(temp_l, l);
r=min(temp_r, r);
}
}
cout<<result<<endl;
return 0;
} //第三题 包含最多连续1的个数
int main()
{
int n;
string str;
cin >> n >> str;
vector<int> mem;
int length = 0;
bool flag = false;
int i = 0;
while (i < str.size())
{
if (str[i] == '1')
{
int pre = i;
while (i < str.size() && str[i] == '1')
i++;
if (i - pre > length)
{
length = i - pre;
mem.clear();
mem.push_back(pre);
}
else if (i - pre == length)
{
mem.push_back(pre);
}
}
else
i++;
}
if (length == 0)
{
cout << 0 << endl;
return 0;
}
int mod = 1000000007;
unsigned long long result = 0;
int pre = 0;
for(auto index:mem){
result=(result+(index-pre+1)*(n-(index+length)+1))%mod;
pre=index+1;
}
cout << result << endl;
return 0;
} 1,2ac 第三题最后才恍然大悟可以包含多个最长连续1 只要去冲就可以了,没来得及改就到时了 g楼,笔试又挂喽

查看17道真题和解析