深信服 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楼,笔试又挂喽